我有一个关于弹性搜索的问题,我想在过滤器中搜索精确匹配。例如,如果仅将滤色器应用为“黑色”,则弹性搜索应仅返回“黑色”产品,而不是其他产品颜色带有黑色关键字的其他产品(例如“黑色灰色”)。 我尝试用“ match_phrase”代替“ match”,但什么也没得到。
请检查我的JSON字符串的屏幕截图:https://www.screencast.com/t/wjCcpfQwTxw
答案 0 :(得分:0)
You can user term query.
For example:
GET {Your index}/_search
{
"query": {
"term": {
"color.keyword": {
"value": "Black"
}
}
}
}
It will return the documents which 'color' field equals to Black.If your color field is text type.Remember add '.keyword' after it.
答案 1 :(得分:-1)
要获得完全匹配,请为颜色颜色键入关键字。这是卷曲的示例。经过Elasticsearch 7.3测试
创建索引
curl -X PUT“ localhost:9200 / products?pretty” -H'内容类型:application / json'-d' {} '
为type关键字的字段颜色定义映射。
curl -X PUT“ localhost:9200 / products / _mapping?pretty” -H'内容类型:application / json'-d' { “属性”:{ “颜色”:{ “ type”:“关键字” } } } '
添加两个样本数据集
* curl -X PUT“ localhost:9200 / products / _doc / 1?pretty” -H'内容类型:application / json'-d' { “颜色”:“蓝绿色” } '
curl -X PUT“ localhost:9200 / products / _doc / 2?pretty” -H'内容类型:application / json'-d' { “ color”:“蓝色” } '*
测试查询。
curl -X GET“ localhost:9200 / products / _search?pretty” -H'内容类型:application / json'-d'{“ query”:{“ match”:{“ color”: “ blue”}}}'