gpt4 book ai didi

elasticsearch - simple_query_string 和 query_string 有什么区别?

转载 作者:行者123 更新时间:2023-11-29 02:49:53 24 4
gpt4 key购买 nike

我的索引中有一个嵌套字段 source 如下所示:

"source": [    
{
"name": "source_c","type": "type_a"
},
{
"name": "source_c","type": "type_b"
}
]

我使用query_string 查询和simple_query_string 查询来查询type_a,得到了两个不同的结果。

查询字符串

{
"size" : 3,
"query" : {
"bool" : {
"filter" : {
"query_string" : {
"query" : "source:\"source.type:=\"type_a\"\""
}
}
}
}
}

我在 294088 个文档中获得了 163459 的点击率。

simple_query_string

{
"size": 3,
"query": {
"bool": {
"filter": {
"simple_query_string": {
"query": "source:\"source.type:=\"type_a\"\""
}
}
}
}
}

我在 294088 个文档中获得了 163505 的点击率。

我只随机做了三种不同的类型type_a,type_b,type_c。所以我不得不说 163459163505294088 文档中差别很小。

我在 Elasticsearch Reference [2.1] 中只得到一个信息

Unlike the regular query_string query, the simple_query_string query will never throw an exception, and discards invalid parts of the query.

我不认为这是造成差异的原因。

我想知道是什么导致了 query_stringsimple_query_string 之间的细微差别?

最佳答案

据我所知,query_stringsimple_query_string 都不支持嵌套查询语法。这是一个open issue , 这是 PR关于那个问题。

那你是怎么得到结果的呢?这里Explain API将帮助您了解正在发生的事情。这个查询

{
"size": 3,
"query": {
"bool": {
"filter": {
"simple_query_string": {
"query": "source:\"source.type:=\"type_a\"\""
}
}
}
}
}

看看输出,你会看到

"description": "ConstantScore(QueryWrapperFilter(_all:source _all:source.type _all:type_a)), 

所以这里发生的事情是 ES 寻找术语 sourcesource.type type_a,它找到 type_a 并返回结果。您还将使用 explain api

找到与 query_string 类似的内容

此外,query_stringsimple_query_string 具有不同的语法,例如 field_name:search_textsimple_query_string 中不受支持。

查询嵌套对象的正确方法是使用 nested query

编辑

这个查询会给你想要的结果。

{
"query": {
"nested": {
"path": "source",
"query": {
"term": {
"source.type": {
"value": "type_a"
}
}
}
}
}
}

希望这对您有所帮助!

关于elasticsearch - simple_query_string 和 query_string 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34603770/

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