我正在使用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>
答案 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
以上匹配的查询。