flex 搜索中的simple_query_string
和query_string
有什么区别?
哪个更适合搜索?
在 flex 搜索simple_query_string
文档中,它们被编写为
但是还不清楚。哪一个更好?
最佳答案
没有简单的答案。这取决于 :)
通常, query_string
专用于更高级的用途。它具有更多选项,但正如您所引用的,当发送的查询无法整体解析时,它会引发异常。相反, simple_query_string
的选项较少,但不会对无效部分抛出异常。
作为示例,请看下面两个查询:
GET _search
{
"query": {
"query_string": {
"query": "hyperspace AND crops",
"fields": [
"description"
]
}
}
}
GET _search
{
"query": {
"simple_query_string": {
"query": "hyperspace + crops",
"fields": [
"description"
]
}
}
}
两者均等价,并从您的索引返回相同的结果。但是当您将查询中断并发送时:
GET _search
{
"query": {
"query_string": {
"query": "hyperspace AND crops AND",
"fields": [
"description"
]
}
}
}
GET _search
{
"query": {
"simple_query_string": {
"query": "hyperspace + crops +",
"fields": [
"description"
]
}
}
}
然后,您将仅从第二个结果(
simple_query_string
)获得结果。第一个(query_string
)将抛出如下内容:{
"error": {
"root_cause": [
{
"type": "query_shard_exception",
"reason": "Failed to parse query [hyperspace AND crops AND]",
"index_uuid": "FWz0DXnmQhyW5SPU3yj2Tg",
"index": "your_index_name"
}
],
"type": "search_phase_execution_exception",
"reason": "all shards failed",
"phase": "query",
"grouped": true,
"failed_shards": [
...
]
},
"status": 400
}
希望您现在了解与引发/不引发异常的区别。
哪个更好?如果您想向一些普通最终用户公开搜索,我建议使用
simple_query_string
。多亏了该最终用户,即使他在查询中犯了一个错误,它也会在每种查询情况下得到一些结果。建议为一些更高级的用户提供query_string
,他们将接受如何正确查询语法的培训,以便他们知道为什么在每种情况下都没有任何结果。