我正在使用elasticsearch允许用户在术语中键入搜索。我有以下属性"名称",例如:
'name': 'The car is black'
如果用于搜索black car
或car black
。
我已经尝试执行Bool必须并执行多个术语['black', 'car']
,但似乎只有在整个字符串是匹配的情况下才起作用。
所以我真正想做的更多是a,该术语是否包含两个单词。
有人可以让我走上正确的道路吗?我已经在这一头上敲了个头了一段时间。
如果似乎仅在整个字符串是匹配的情况下起作用,请先确保在索引映射您的字符串属性属性name
,即此属性的映射 DON't包含 "index": "not_analyzed"
。如果事实并非如此,则需要重新索引您的索引,以便能够搜索令牌而不是整个短语。
确定分析字符串后,您可以使用:
- 用
"minimum_should_match"
参数查询的术语等于输入的单词数量。 - 带有每个单词的术语查询的Bool查询。
- 常见术语查询,它具有为此目的具有不错的干净语法(您不需要分解输入字符串,并在应用程序中像以前的两个一样构建更复杂的查询结构),除了采用更聪明的方法来分析spotwords。