查找Elasticsearch匹配的字段

时间:2015-04-27 12:12:41

标签: elasticsearch

我正在使用Elasticsearch搜索用户应该加入的群组。我将用户数据嵌套到搜索查询中。返回时,我会返回用户应该在的最近的匹配组。

我正在搜索的字段是嵌套字段,如下所示:

`{"interests": [
                {"topics":["python", "stackoverflow", "elasticsearch"]}, 
                {"topics":["arts", "textiles"]}
               ]}`

但是如果你想了解一场比赛 - 你是怎么做到的?

Elasticsearch确实有一个解释函数,说明使用tfidf得分是什么,但没有具体说明使用了哪些术语。

例如,如果我搜索“纺织品”,则文档应匹配“纺织品”。因此,我希望以解释或其他方式返回“纺织品”一词。

我看到的唯一方法是提供这种需求,是存储搜索和检索到的文档,然后处理它们以发现ES最有可能匹配的单词。

编辑 - 为了更清晰的问题

我的索引中包含"interests": ['arts', 'fine arts', 'art painting', 'arts and crafts', 'sports']

的示例

现在我的搜索,我正在寻找Arts和许多其他事情。现在我要搜索的术语多次出现在这个列表中,因此应该始终是一个贡献者。

我在回答中想要的是说这些单词与['arts', 'fine arts', 'art painting', 'arts and crafts']匹配,以及它们匹配的程度i..e'arts'应该高于其他,但所有其他的也是相关的< / p>

1 个答案:

答案 0 :(得分:1)

Elasticsearch允许您为所有查询指定_name字段 过滤器。这意味着您可以将查询分成不同的部分 单独的名称,这将允许您确定哪些部分匹配。

例如:

{
  "query" : {
      "bool" : {
          "should" : [
              {"match" : { "interests.topics" : {"query" : "python", "_name" : "py-topic"} }},
              {"match" : { "interests.topics" : {"query" : "arts", "_name" : "arts-topic"} }}
          ]
      }
  }
}

然后,在您的回复中,您将返回任何查询的数组(或 过滤器)匹配,您可以确定py-topic查询和/或。{ arts-topic以上匹配的查询。