我有这个查询
{
"bool": {
"should": [
{
"multi_match": {
"query": "LAS VEGAS, HENDERSON",
"fields": ["city"]
}
}
]
}
}
返回:
"city": "LAS VEGAS",
"city": "LAS CRUCES",
"city": "HENDERSON",
注意LAS CRUCES
结果。我不想要它。
一种方法是将它写成这样:
"bool": {
"should": [
{
"match": {
"city": {
"query": "LAS VEGAS",
"operator": "and"
}
}
},
{
"match": {
"city": {
"query": "HENDERSON",
"operator": "and"
}
}
}
}
但我更喜欢第一种方法,如果可以的话。
有什么想法吗?
答案 0 :(得分:0)
multi_match接受operator
标记,该标记可设置为or
。
{
"bool": {
"should": [
{
"multi_match": {
"query": "LAS VEGAS, HENDERSON",
"fields": ["city"],
"operator": "or"
}
}
]
}
}
答案 1 :(得分:0)
您可以使用GET /_search
{
"query": {
"query_string" : {
"fields" : ["city"],
"query" : "\"LAS VEGAS\" OR \"HENDERSON\""
}
}
}
查询,如下所示:
city
您需要将值括在引号中以搜索完整的词组。
如果您使用text
字段搜索完全匹配,则应考虑将其从keyword
更改为city
的映射类型。它会带给你很好的表现。
如果您的keyword
字段属于terms query
类型,那么您可以使用GET /_search
{
"query": {
"constant_score" : {
"filter" : {
"terms" : { "city" : ["LAS VEGAS", "HENDERSON"]}
}
}
}
}
获得相同的结果,如下所示:
.
├── pom.xml
└── src
└── main
├── java
│ └── mywebapp
│ ├── config
│ │ ├── MyWebAppInitializer.java
│ │ ├── RootConfig.java
│ │ └── WebConfig.java
│ └── web
│ └── HomeController.java
├── resources
└── webapp
└── WEB-INF
├── views
│ └── home.jsp
└── web.xml
希望这有帮助!