Elasticsearch匹配字段=值(不包含)
Elasticsearch match field=value (not contains)
我在通过 elasticsearch 进行搜索时遇到问题。
我有索引 product
和字段 title
和 gender
当我使用 default_field: title
进行查询时,我只需要使用 gender=male
(不是女性或其他人)
来获得结果
查询:dress AND gender:male
结果包含两种性别:male
和 female
和 male,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\""
我在通过 elasticsearch 进行搜索时遇到问题。
我有索引 product
和字段 title
和 gender
当我使用 default_field: title
进行查询时,我只需要使用 gender=male
(不是女性或其他人)
查询:dress AND gender:male
结果包含两种性别:male
和 female
和 male,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\""