Elasticsearch匹配字段=值(不包含)

Elasticsearch match field=value (not contains)

我在通过 elasticsearch 进行搜索时遇到问题。 我有索引 product 和字段 titlegender

当我使用 default_field: title 进行查询时,我只需要使用 gender=male(不是女性或其他人)

来获得结果

查询:dress AND gender:male

结果包含两种性别:malefemalemale,female

在我看来 gender:* 搜索所有包含 male 的内容,但不是完全匹配的值。如何正确查询?

我在 Rails

上通过 Ruby 使用它
Product.search({
      query: {
        query_string: {
            query: query,
            default_field: "title"
          }
        },
        size: per_page,
        sort: [ _score: { order: relevance } ]
    })

性别是 keyword 数据类型吗?我怀疑您 left/set 默认映射到 gender 字段(即文本 + 关键字子字段)。在这种情况下,请尝试以下查询:dress AND gender.keyword:male

根据 this 我只需要将值放在双引号中..

query = '(dress) AND (gender:"male")'

如果需要,别忘了转义它们"gender:\"male\""