弹性搜索 - 使用Java进行短语匹配

时间:2014-11-05 18:03:48

标签: elasticsearch

我正在尝试进行短语匹配以找到类似的短语。

EG。名称字段具有以下条目,并且所有3个应评估为相同:

  1. "美国科技公司"
  2. "美国科技公司阿拉巴马州"
  3. " USA Tech Company California"
  4. 您能否建议使用短语匹配器或类似内容的Java代码,以表明名称字段中的上述条目相同(可能更高分)

    感谢。

1 个答案:

答案 0 :(得分:1)

您可以使用" phrase"输入或" phrase_prefix"根据你的情况输入。 在Java客户端中,Elasticsearch提供了两种可以使用的方法。

  • QueryBuilders.matchPhraseQuery(name,text);
  • QueryBuilders.matchPhrasePrefixQuery(name,text);

尝试测试下面的脚本以检查结果。

curl -s -XPOST "http://localhost:9200/ap100/example/1" -d '{
    "name": "USA Tech Company"
}'
curl -s -XPOST "http://localhost:9200/ap100/example/2" -d '{
    "name": "USA Tech Company Alabama"
}'
curl -s -XPOST "http://localhost:9200/ap100/example/3" -d '{
    "name": "USA Tech Company California"
}'

curl -XGET "http://localhost:9200/ap100/example/_search?pretty" -d '{
    "query":{
        "match":{
            "name": {
                "type": "phrase",
                "query": "usa tech company",
                "slop": 2
            }
        }
    }
}'

curl -XGET "http://localhost:9200/ap100/example/_search?pretty" -d '{
    "query":{
        "match":{
            "name": {
                "type": "phrase_prefix",
                "query": "usa tech company"
            }
        }
    }
}'