gpt4 book ai didi

elasticsearch - Elasticsearch查询以查找应查询中匹配项的数量

转载 作者:行者123 更新时间:2023-12-03 01:36:59 24 4
gpt4 key购买 nike

我正在寻找您的帮助,以建立以下解决方案:

这是什么查询:
查询以检查关键字是否存在五个字段中的任意一个(例如街道,城市,姓氏,国家/地区,大陆)
所以我想检查那些具有美国或英国的字段中的任何一个

我在寻找帮助。

获得分数2:
如果在以下五个字段(“街道”,“城市”,“姓氏”,“国家”,“大陆”)中的任何一个中都找到了两个关键字“美国”,“英国”

得到分数1:
如果在以下五个字段(“街道”,“城市”,“姓氏”,“国家”,“大陆”)中的任何一个中找到这些关键字中的“美国”,“英国”中的任何一个

获得分数0:
如果在以下五个字段(“街道”,“城市”,“姓氏”,“国家”,“大陆”)中的任何一个中都没有找到这些关键词“美国”,“英国”

这样我就可以在前端结果中显示0/2或1/2或2/2

现有查询:

GET  main_index/_doc/_search
{
"query": {
"bool": {
"should": [
{
"multi_match": {
"fields": ["street","city","lastname","country","continent"],
"query": "united states",
"type": "phrase"
}
},
{
"multi_match": {
"fields": ["street","city","lastname","country","continent"],
"query": "united kingdom",
"type": "phrase"
}
}]
}
}
}

最佳答案

有两种解决方法。

(注意:我简化了下面的查询,以在单个address字段上进行查询,但是原理保持不变)

1.命名查询+应用程序逻辑

正如评论中提到的Val一样,您可以使用命名查询(例如,将它们命名为us-queryuk-query)来知道哪个项目与哪个查询匹配。

然后,您可以让您的应用程序代码解析每个结果的matched_queries字段,以了解匹配的查询并分配相关分数,然后再将结果返回到前端:

{
"query": {
"bool": {
"should": [
{
"multi_match": {
"fields": ["address"],
"query": "united states",
"type": "phrase",
"_name": "us-query"
}
},
{
"multi_match": {
"fields": ["address"],
"query": "united kingdom",
"type": "phrase",
"_name": "uk-query"
}
}]
}
}
}

2.功能分数

您可以将 script_score类型的 function scorefilter参数结合使用,为每个查询分配正确的分数。
我个人不喜欢此解决方案,因为它使用过于复杂的查询来获得相当简单的结果,并在查询中引入了一些重复。
{
"query": {
"function_score": {
"query": { "match_all": {} },
"functions": [
{
"filter": {
"multi_match": {
"fields": ["address"],
"query": "united states",
"type": "phrase",
}
},
"script_score" : {
"script" : {
"source": "1"
}
}
},
{
"filter": {
"multi_match": {
"fields": ["address"],
"query": "united kingdom",
"type": "phrase",
}
},
"script_score" : {
"script" : {
"source": "1"
}
}
},
{
"filter": {
"bool": {
"must": [
{
"multi_match": {
"fields": ["address"],
"query": "united kingdom",
"type": "phrase",
}
},
{
"multi_match": {
"fields": ["address"],
"query": "united states",
"type": "phrase",
}
}
]
}
},
"script_score" : {
"script" : {
"source": "2"
}
}
}
]
}
}
}

关于elasticsearch - Elasticsearch查询以查找应查询中匹配项的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51691917/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com