gpt4 book ai didi

node.js - ElasticSearch混合查询类型

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

我很难让这个Elasticsearch查询进行合作。我目前正在尝试使用 bool(boolean) 查询来获取精确和已分析/全文搜索的结果。

似乎出于某种原因,我无法在 bool(boolean) 查询中使用match过滤器:

{
"bool":{
"should":[
"match":{"mainInfo.states": "Wisconsin"},
"match":{"mainInfo.cities": "WI"}
]
}
}

这将引发解析器错误,告诉我match不是查询类型。

我需要在具有术语过滤器的 bool(boolean) 查询中进行全文搜索的功能。所以从本质上讲,我希望查询如下:
{
"bool":{
"must":[
"term":{"mainInfo.clientId":"123456"}
],
"should":[
"match":{"mainInfo.states": "Wisconsin"},
"match":{"mainInfo.cities": "WI"}
]
}
}

在这里我可以有1个或2个必须存在的术语,在几个全文检索中应该有2个存在。

我还使用function_score查询来使用 random_seed返回随机的,可分页的结果。

我的问题是我无法让全文查询在bool查询中运行。似乎只有 term过滤器起作用。另外,当我将 match查询从bool查询中删除时,似乎match查询还是bool查询都可以使用,但两者都不可行。

我似乎无法形成将匹配多个 term查询和多个匹配查询的查询。 term 必须存在,而 match 应该存在(因此至少与过滤器之一匹配)。

我绝不是 flex 搜索专家,当您要查找有关更复杂查询的信息时,文档似乎非常模糊。

如果有人可以举一个如何以这种方式进行查询的示例,将不胜感激。但是,请不要仅仅将我链接到Bool Queries的文档或任何其他ElasticSearch文档。我向您保证,我已经仔细阅读了它们,并且尝试了多种不同的方法来执行此查询,但是似乎都没有这种行为。

我正在使用ElasticSearch 1.3.2

最佳答案

似乎出于某种原因我无法在 bool(boolean) 查询中使用匹配过滤器:

查询的语法不正确,如果有多个子句,则每个子句都应包装在自己的对象中:

{
"query":{
"custom_filters_score":{
"query":{
"nested":{
"path":"mainInfo",
"query":{
"bool":{
"should":[
{
"match":{
"mainInfo.states":"WI"
}
},
{
"match":{
"mainInfo.cities":"Wisconsin"
}
}
]
}
}
}
},
"filters":[{
"term":{
"mainInfo.clientId":"123456"
},
"script":"yourscriptgoeshere"
}]
}
}
}

关于node.js - ElasticSearch混合查询类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25985266/

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