2014-11-05 79 views
0

我正在尝试做一个短语匹配来找到类似的短语。弹性搜索 - 使用Java的短语匹配

例如, Name字段具有以下项和所有3进行评估,以相同:

  1. “美国科技公司”
  2. “美国科技公司阿拉巴马”
  3. “美国高科技公司加州”

能你建议使用短语匹配器或类似的东西的Java代码建议名称字段中的上述条目是相同的(可能更高的分数)

谢谢。

回答

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" 
      } 
     } 
    } 
}'