elasticsearch 什么';简单查询字符串和查询字符串之间的区别是什么?
我的索引中有一个嵌套字段elasticsearch 什么';简单查询字符串和查询字符串之间的区别是什么?,elasticsearch,lucene,elasticsearch,Lucene,我的索引中有一个嵌套字段source,如下所示: "source": [ { "name": "source_c","type": "type_a" }, { "name": "source_c","type": "type_b" } ] 我使用query\u stringquery和simple\u query\u stringquery来查询type\u a,得到了两个不同的结果 查询字符串 { "size" :
source
,如下所示:
"source": [
{
"name": "source_c","type": "type_a"
},
{
"name": "source_c","type": "type_b"
}
]
我使用query\u string
query和simple\u query\u string
query来查询type\u a
,得到了两个不同的结果
查询字符串
{
"size" : 3,
"query" : {
"bool" : {
"filter" : {
"query_string" : {
"query" : "source:\"source.type:=\"type_a\"\""
}
}
}
}
}
{
"size": 3,
"query": {
"bool": {
"filter": {
"simple_query_string": {
"query": "source:\"source.type:=\"type_a\"\""
}
}
}
}
}
我在294088份文档中点击了163459次
简单查询字符串
{
"size" : 3,
"query" : {
"bool" : {
"filter" : {
"query_string" : {
"query" : "source:\"source.type:=\"type_a\"\""
}
}
}
}
}
{
"size": 3,
"query": {
"bool": {
"filter": {
"simple_query_string": {
"query": "source:\"source.type:=\"type_a\"\""
}
}
}
}
}
我在294088份文档中点击了163505次
我只随机制作了三种不同类型的类型a
,类型b
,类型c
。所以我不得不说163459和163505在294088文档中的差异非常小
我只收到一条信息
与常规查询\u字符串查询不同,简单查询\u字符串查询永远不会引发异常,并丢弃查询的无效部分
我不认为这是造成差异的原因
我想知道是什么使
query\u string
和simple\u query\u string
之间的结果略有不同?据我所知,query\u string
或simple\u query\u string
都不支持嵌套查询语法。这是一个问题,这是关于这个问题的关键
那你是怎么得到结果的?这里将帮助你了解发生了什么。这个问题
{
"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寻找术语source,source.type或type_a,它找到type_a并返回结果。
使用explain-api
另外,query\u string
和simple\u query\u string
也有不同的语法,例如字段名称:simple\u query\u string
不支持搜索文本
查询嵌套对象的正确方法是使用
编辑
此查询将为您提供所需的结果
{
"query": {
"nested": {
"path": "source",
"query": {
"term": {
"source.type": {
"value": "type_a"
}
}
}
}
}
}
希望这有帮助 简单查询\u字符串
用于不安全输入
这样用户可以输入任何内容,如果输入无效,它将不会引发异常。只需丢弃无效输入。字段类型的映射是什么?
字符串和未分析的字符串当您两次使用源字段时,您使用的查询字符串看起来很奇怪(源:\“source.type:=\”type\u a\“\”
)。你确定你的语法吗?此外,您需要知道simple\u query\u string
使用的查询语法与query\u string
不同。