ElasticSearch词袋匹配

时间:2018-09-18 09:16:11

标签: elasticsearch elasticsearch-5

我一直在尝试使用ES做一件非常简单的事情,并且只能通过一种变通方法进行管理: 给定一个查询和一个文档字段,将所有查询的术语与所有字段的术语匹配。 换句话说:

  1. 查询的术语是该字段的子集
  2. 该字段的术语是查询的子集

在匹配查询中使用and运算符可以满足要求1)。但是我找不到2)的方法。

到目前为止,我设法做到这一点的唯一方法是利用highlight并要求突出显示所有字符串(在我的应用程序逻辑中)

还有另一种方法吗?

示例:

PUT bananas/banana/1
{ "name" : "banana"}

PUT bananas/banana/2
{ "name" : "ripe banana"}


PUT bananas/banana/3
{ "name" : "not so ripe banana"}

GET bananas/_search
{
  "query" : {
    "match": { "_all": { "query": "ripe banana", "operator": "and" } }
  },
  "highlight" : {
    "fields" : { "*" : { } },
    "require_field_match": false
  }
}

# Result (hits only):

  "hits" : {
    "hits" : [
      {
        "_index" : "bananas",
        "_type" : "banana",
        "_id" : "3",
        "_score" : 0.5753642,
        "_source" : {
          "name" : "not so ripe banana"
        },
        "highlight" : {
          "name" : [
            "not so <em>ripe</em> <em>banana</em>"
          ]
        }
      },
      {
        "_index" : "bananas",
        "_type" : "banana",
        "_id" : "2",
        "_score" : 0.51623213,
        "_source" : {
          "name" : "ripe banana"
        },
        "highlight" : {
          "name" : [
            "<em>ripe</em> <em>banana</em>"
          ]
        }
      }
    ]
  }

因此,在这种情况下,我想排除“不太成熟的香蕉”的结果(由于某种原因,它甚至首先返回!)。 我的解决方法是检查响应的highlight部分,看是否有未突出显示的内容

0 个答案:

没有答案