2014-11-05 83 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" 
      } 
     } 
    } 
}'