弹性搜索多重匹配:是否可以搜索除一个以外的所有字段?

时间:2019-07-10 20:10:38

标签: elasticsearch

我们有一个Elastic Search结构,它可以在multi_match查询中指定字段,如下所示:

"multi_match": {
                            "query": "find this string",
                            "fields": ["*_id^20", "*_name^20", "*"]
                        }

这很好用-除非在某些情况下,例如查询为"Find NOWAK"。这是因为“ NOW”是日期搜索的保留字,并且字段"*"与定义为日期的字段匹配。

所以我想做的是忽略与"*_at"匹配的字段。

有没有办法告诉Elastic Search忽略multi_match查询中的某些字段?

如果答案为“否”,那么接下来的问题是如何逃避搜索词,以免触发关键字

运行版本6.7

2 个答案:

答案 0 :(得分:0)

尝试一下:

Exclude a field on a Elasticsearch query

curl -XGET 'localhost:9200/testidx/items/_search?pretty=true' -d '{
  "query" : {
     "query_string": {
          "fields": ["title", "field2", "field3"],      <-- add this
          "query": "Titulo"
     }},
     "_source" : {
          "exclude" : ["*.body"]
     }
}'

答案 1 :(得分:0)

显然答案是“不:没有办法告诉ElasticSearch忽略multi_match查询中的某些字段”

对于我的特定问题,我找到了一种便宜的方法来查找必要的白名单字段(这是在ElasticSearch范围之外执行的,否则我会在此处发布),并在构建查询时将其替换为“ *”

我希望有人能告诉我我错了,但我不认为我是错的。