Elasticsearch多项搜索

时间:2015-05-09 04:36:57

标签: elasticsearch

我使用Elasticsearch允许用户输入要搜索的字词。我有以下财产' name'我想搜索一下,例如:

'name': 'The car is black'

如果以下内容用于搜索black carcar black,我想要退回此文档。

我已经尝试过做一个bool必须并执行多个术语['black', 'car']但似乎只有在整个字符串匹配时它才有效。

所以我真正喜欢做的更多的是,该术语是否包含任何顺序的单词。

有人可以让我走上正轨吗?我已经在这个问题上敲了一会儿。

1 个答案:

答案 0 :(得分:0)

如果它看起来只有整个字符串匹配才有效,首先要确保在索引映射中分析你的字符串属性name,即该属性的映射不包含 "index": "not_analyzed"。如果不是这样,您需要重新索引索引,以便能够搜索令牌而不是仅搜索整个短语。

一旦确定分析了字符串,就可以使用:

  1. 条款查询"minimum_should_match"参数等于输入的字数。
  2. 使用包含每个单词的术语查询的must子句的Bool查询。
  3. Common terms query为此目的有一个很好的干净语法(你不需要分解输入字符串并在你的应用程序中构建更复杂的查询结构,就像前两个一样)除了采用更智能的方法停止分析。