为什么代码中的短语与多值字段匹配?

时间:2017-02-13 03:36:56

标签: elasticsearch

The link表示在多值字段上使用词组匹配时会发生奇怪的事情。但就我而言,短语匹配不能匹配多值字段。奇怪的事情并没有发生。 创建和搜索:

curl -XPUT http://localhost:9200/my_index/groups/1 -d '
{
    "names": [ "John Abraham", "Lincoln Smith"]
}
'

curl -XGET http://localhost:9200/my_index/groups/_search -d '
{
    "query": {
        "match_phrase": {
            "names": "Abraham Lincoln"
        }
    }
}
'

响应:

{

    "took": 5,
    "timed_out": false,
    "_shards": {
        "total": 5,
        "successful": 5,
        "failed": 0
    },
    "hits": {
        "total": 0,
        "max_score": null,
        "hits": [ ]
    }

}

不确定我错在哪里?我不能像教程那样得到结果吗?任何帮助/指针都非常感谢。

注意:我在Elasticsearch 2.1.1,2.4.4和5.0.1上运行此脚本。所有结果都是一样的。

1 个答案:

答案 0 :(得分:1)

您所指的链接是指向ES 5.x尚未更新的“ES 2.x权威指南”的旧链接。 user guide提到默认值为100。

您还可以通过点击_analyze端点

来查看此信息
POST my_index/_analyze
{
    "text": [ "John Abraham", "Lincoln Smith"],
    "field": "names"
}

产生这个(见第三和第四项的位置)

{
   "tokens": [
      {
         "token": "john",
         "start_offset": 0,
         "end_offset": 4,
         "type": "<ALPHANUM>",
         "position": 0
      },
      {
         "token": "abraham",
         "start_offset": 5,
         "end_offset": 12,
         "type": "<ALPHANUM>",
         "position": 1
      },
      {
         "token": "lincoln",
         "start_offset": 13,
         "end_offset": 20,
         "type": "<ALPHANUM>",
         "position": 102
      },
      {
         "token": "smith",
         "start_offset": 21,
         "end_offset": 26,
         "type": "<ALPHANUM>",
         "position": 103
      }
   ]
}

因此,如果您添加100的斜率,那么您将找到匹配项:

POST my_index/groups/_search
{
   "query": {
      "match_phrase": {
         "names": {
            "query": "Abraham Lincoln",
            "slop": 100
         }
      }
   }
}