[英]how to use fields property of query_string to be and logically using elasticsearch?
[英]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
henderson OR Boulder City OR Sloan
進行過濾
有任何想法嗎?
更改
{
"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,這會給您帶來任何速度上的提高嗎? (如果您希望它們不計分,也可以更改應嵌套在過濾器中的“應該”)
GET data/_search
{
"query": {
"bool": {
"must": [
{
"prefix": {
"last_name": "test"
}
}
],
"should": [
{
"match": {
"city_*": "henderson"
}
},
{
"match": {
"city_*": "Boulder City"
}
},
{
"match": {
"city_*": "Sloan"
}
}
]
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.