我如何在Elastic Search中获得完全匹配过滤器结果

时间:2019-08-19 15:13:56

标签: php elasticsearch exact-match

我有一个关于弹性搜索的问题,我想在过滤器中搜索精确匹配。例如,如果仅将滤色器应用为“黑色”,则弹性搜索应仅返回“黑色”产品,而不是其他产品颜色带有黑色关键字的其他产品(例如“黑色灰色”)。 我尝试用“ match_phrase”代替“ match”,但什么也没得到。

请检查我的JSON字符串的屏幕截图:https://www.screencast.com/t/wjCcpfQwTxw

enter image description here 预先感谢

2 个答案:

答案 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测试

  1. 创建索引

    curl -X PUT“ localhost:9200 / products?pretty” -H'内容类型:application / json'-d' {} '

  2. 为type关键字的字段颜色定义映射。

    curl -X PUT“ localhost:9200 / products / _mapping?pretty” -H'内容类型:application / json'-d' {   “属性”:{     “颜色”:{       “ type”:“关键字”     }   } } '

  3. 添加两个样本数据集

    * 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”:“蓝色” } '*

  4. 测试查询。

    curl -X GET“ localhost:9200 / products / _search?pretty” -H'内容类型:application / json'-d'{“ query”:{“ match”:{“ color”: “ blue”}}}'