如何在 elasticsearch 中使用 query_string 和过滤器?
How to use query_string with the filter in elasticsearch?
我有一个简单的查询
GET data/_search
{
"query": {
"bool": {
"must": [
{
"prefix": {
"last_name": "test"
}
},
{
"bool": {
"should": {
"query_string": {
"query": "henderson OR Boulder City OR Sloan",
"fields": [
"city_*"
]
}
}
}
}
]
}
}
}
我想将 query_string
更改为过滤器。我不确定如何转换
{
"bool": {
"should": {
"query_string": {
"query": "henderson OR Boulder City OR Sloan",
"fields": [
"city_*"
]
}
}
}
}
变成类似
的东西
"filter": {
"query_string": {
"query": "henderson OR Boulder City OR Sloan",
"fields": [
"city_*"
]
}
}
并确保它按所有这些城市 henderson OR Boulder City OR Sloan
和所有这些字段 city_*.keyword
进行过滤
有什么想法吗?
改变
{
"bool": {
"should": {
"query_string": {
"query": "henderson OR Boulder City OR Sloan",
"fields": [
"city_*"
]
}
}
}
}
到
{
"bool": {
"filter": {
"query_string": {
"query": "henderson OR Boulder City OR Sloan",
"fields": [
"city_*"
]
}
}
}
}
这是否得到了您想要的行为?在过滤器下使用相同的查询应该会得到相同的结果,但评分不会由查询加权。
编辑 - 我要提出的另一项建议是将您的查询调整为:
GET data/_search
{
"query": {
"bool": {
"must": [
{
"prefix": {
"last_name": "test"
}
}
],
"filter": [
{
"query_string": {
"query": "henderson OR Boulder City OR Sloan",
"fields": [
"city_*"
]
}
}
]
}
}
}
编辑 2 - 您或许可以不再使用 query_string,这会提高您的速度吗? (如果您希望它们不计分,您也可以将 should 更改为嵌套在过滤器中的 "shoulds")
GET data/_search
{
"query": {
"bool": {
"must": [
{
"prefix": {
"last_name": "test"
}
}
],
"should": [
{
"match": {
"city_*": "henderson"
}
},
{
"match": {
"city_*": "Boulder City"
}
},
{
"match": {
"city_*": "Sloan"
}
}
]
}
}
}
我有一个简单的查询
GET data/_search
{
"query": {
"bool": {
"must": [
{
"prefix": {
"last_name": "test"
}
},
{
"bool": {
"should": {
"query_string": {
"query": "henderson OR Boulder City OR Sloan",
"fields": [
"city_*"
]
}
}
}
}
]
}
}
}
我想将 query_string
更改为过滤器。我不确定如何转换
{
"bool": {
"should": {
"query_string": {
"query": "henderson OR Boulder City OR Sloan",
"fields": [
"city_*"
]
}
}
}
}
变成类似
的东西 "filter": {
"query_string": {
"query": "henderson OR Boulder City OR Sloan",
"fields": [
"city_*"
]
}
}
并确保它按所有这些城市 henderson OR Boulder City OR Sloan
和所有这些字段 city_*.keyword
有什么想法吗?
改变
{
"bool": {
"should": {
"query_string": {
"query": "henderson OR Boulder City OR Sloan",
"fields": [
"city_*"
]
}
}
}
}
到
{
"bool": {
"filter": {
"query_string": {
"query": "henderson OR Boulder City OR Sloan",
"fields": [
"city_*"
]
}
}
}
}
这是否得到了您想要的行为?在过滤器下使用相同的查询应该会得到相同的结果,但评分不会由查询加权。
编辑 - 我要提出的另一项建议是将您的查询调整为:
GET data/_search
{
"query": {
"bool": {
"must": [
{
"prefix": {
"last_name": "test"
}
}
],
"filter": [
{
"query_string": {
"query": "henderson OR Boulder City OR Sloan",
"fields": [
"city_*"
]
}
}
]
}
}
}
编辑 2 - 您或许可以不再使用 query_string,这会提高您的速度吗? (如果您希望它们不计分,您也可以将 should 更改为嵌套在过滤器中的 "shoulds")
GET data/_search
{
"query": {
"bool": {
"must": [
{
"prefix": {
"last_name": "test"
}
}
],
"should": [
{
"match": {
"city_*": "henderson"
}
},
{
"match": {
"city_*": "Boulder City"
}
},
{
"match": {
"city_*": "Sloan"
}
}
]
}
}
}