这样的查询有什么区别:
"query": {
"bool": {
...
"should": [
{
"match": {
"description": {
"query": "test"
}
}
},
{
"match": {
"address": {
"query": "test",
}
}
},
{
"match": {
"country": {
"query": "test"
}
}
},
{
"match": {
"city": {
"query": "test"
}
}
}
]
}}
Run Code Online (Sandbox Code Playgroud)
那一个:
"query": {
"bool": {
...
"should": [
{
"query_string": {
"query": "test",
"fields": [
"description",
"address",
"country",
"city"
]
}
}
]
}}
Run Code Online (Sandbox Code Playgroud)
表现,相关性?
提前致谢!
根据字段分析器分析查询(除非您在查询本身中指定分析器),因此使用单个查询查询多个字段并不一定意味着仅分析查询一次.
请记住,query_string支持lucene查询语法:AND和OR运算符,查询特定字段,通配符,短语查询等因此需要进行解析,我不认为这在性能方面有很大差异,但它容易出错并可能导致错误.如果您不需要所有这些功能,请坚持匹配查询,如果您想对多个字段执行相同的查询,请查看multi_match查询,该查询执行您对query_string所做的操作,但内部转换为多个匹配查询.
此外,如果您比较多个匹配查询的输出并且您的query_string可能会完全不同,则返回得分.使用bool查询可以有效地构建lucene布尔查询,而query_string默认"use_dis_max":"true"使用,这意味着它默认在内部使用dis_max查询.使用multi_match查询也是如此.如果设置use_dis_max为false,则将在内部使用bool查询.
| 归档时间: |
|
| 查看次数: |
3227 次 |
| 最近记录: |