gpt4 book ai didi

elasticsearch - Elasticsearch查询过滤器组合问题

转载 作者:行者123 更新时间:2023-12-02 23:43:21 28 4
gpt4 key购买 nike

我试图理解为什么下面的Elasticsearch查询不起作用。
编辑:
查询中提到的字段来自不同的索引。例如,过滤器具有分类字段,该字段与查询字符串中提到的字段的索引不同。
过滤查询的期望是,当用户专门搜索分类字段(即 secret 或 protected )时,将显示值。否则,如果用户从其他索引中搜索任何其他字段(例如名字或人),则不应考虑应用了任何过滤器,因为名字或人不属于该过滤器

{
"query": {
"bool": {
"filter": {
"terms": {
"classification": [
"secret",
"protected"
]
}
},
"must": {
"query_string": {
"query": "*john*",
"fields": [
"classification",
"firstname",
"releasability",
"person"
]
}
}
}
}
}
预期结果是现场人员返回的john。当上面的代码中没有应用过滤器时,此方法有效
{
"query": {



"query_string": {
"query": "*john*",
"fields": [
"classification",
"firstname",
"releasability",
"person"
]
}


}
}
过滤器的目的仅是当所述字段包含提到的值时才过滤记录,否则它应适用于所有值。
为什么它不产生john的结果而只产生分类值的结果?

最佳答案

添加带有示例索引数据和搜索查询的工作示例。
要了解有关 bool(boolean) 查询的更多信息,请引用此官方documentation
索引数据:my_index索引中的索引数据

{
"name":"John",
"title":"b"
}
{
"name":"Johns",
"title":"a"
}
my_index1索引中的索引数据
{
"classification":"protected"
}
{
"classification":"secret"
}
搜索查询: POST http://localhost:9200/_search
{
"query": {
"bool": {
"should": [
{
"bool": {
"filter": [
{
"terms": {
"classification": [
"secret",
"protected"
]
}
}
]
}
},
{
"bool": {
"must": [
{
"query_string": {
"query": "*john*",
"fields": [
"name",
"title"
]
}
}
]
}
}
]
}
}
}
搜索结果:
 "hits": [
{
"_index": "my_index",
"_type": "_doc",
"_id": "1",
"_score": 1.0,
"_source": {
"name": "John",
"title": "b"
}
},
{
"_index": "my_index",
"_type": "_doc",
"_id": "2",
"_score": 1.0,
"_source": {
"name": "Johns",
"title": "a"
}
},
{
"_index": "my_index1",
"_type": "_doc",
"_id": "1",
"_score": 0.0,
"_source": {
"classification": "secret"
}
},
{
"_index": "my_index1",
"_type": "_doc",
"_id": "2",
"_score": 0.0,
"_source": {
"classification": "protected"
}
}
]

关于elasticsearch - Elasticsearch查询过滤器组合问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63373483/

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