5

我正在尝试使用 elasticsearch 搜索特定短语,即“foo bar”。我的查询类似于以下查询:

curl -X GET "http://localhost:9200/objects/object/_search" -d '{
  "query": {
    "bool": {
      "must": [
        {
          "query_string": {
            "query": "\"foo bar\"",
            "default_field": "_all"
          }
        }
      ]
    }
  }
}'

我的索引中有两个对象,看起来类似于:

{
  sub_sections: [
    {
      name: "foo"
    },
    {
      name: "bar"
    }
  ]
}

{
  sub_sections: [
    {
      name: "foo bar"
    }
  ]
}

当我在查询中使用双引号时,我只希望返回与短语匹配的最后一个对象。但是,始终返回两个对象。到目前为止,我已经尝试过auto_generate_phrase_queries++ 之类的选项,但没有运气。

这是预期的行为吗?我怎样才能只返回具有完全匹配词组的文档?

4

1 回答 1

4

默认情况下,两个示例的索引方式完全相同。当同一字段的多个实例被索引时,它们将按顺序索引,一个字段的最后一项与下一个字段的第一项之间没有间隙。这就是短语搜索跨越字段实例的原因。position_offset_gap您可以通过在映射中设置为非零值来增加字段之间的差距。有关快速演示,请参阅https://gist.github.com/4420794

于 2012-12-31T15:45:20.893 回答