所以ElasticSearch有 term 查询,它允许我提供多个值并返回一个文档,其中字段X匹配任何这些值。
但是我想用 match_phrase 做同样的事情 - 即返回文档,其中字段X包含对带空格的术语不区分大小写的匹配。我目前使用或过滤器(见下文)。但这似乎是一种非常冗长的方式来做我想做的事情,考虑到术语已经做了类似的事情。
当前方法
在一个字段中搜索三个值之一的查询应该是33行,这似乎很荒谬。
{
"query": {
"filtered": {
"filter": {
"or": {
"filters": [
{
"query": {
"match_phrase": {
"myField1": "My first search phrase"
}
}
},
{
"query": {
"match_phrase": {
"myField1": "My second search phrase"
}
}
},
{
"query": {
"match_phrase": {
"myField1": "My third search phrase"
}
}
}
]
}
}
}
}
}
答案 0 :(得分:8)
经过一个漫长的夜晚试图弄明白这一点后,我想出了这个:
"query" : {
"bool": {
"should": [
{
"match_phrase": {
"myField1": "My first search phrase"
}
},
{
"match_phrase": {
"myField1": "My second search phrase"
}
}
]
}
}
参考:https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-bool-query.html
答案 1 :(得分:5)
Query string在这些方面会有所帮助
{
"query": {
"query_string": {
"default_field": "myField1",
"query": "\"My first search phrase\" OR \"My second search phrase\" OR \"My third search phrase\""
}
}
}