3-Elasticsearch深入搜索-近似匹配
一起來玩Elasticsearch,加我微信:wx1250134974
Elasticsearch認證復習準備
https://www.elastic.co/guide/cn/elasticsearch/guide/current/getting-started.html
##近似匹配概念:
舉例說明:對于“eat food” ,不僅僅能區分是否包含eat或者food這一層,還能區分eat food這個關系(這個關系也僅僅是分詞之間臨近)。可以用這個功能做自動機器人應答,把歷史的問與答存儲好,通過檢索更符合的問題,找到歷史應答。
?
?
1、近似匹配
GET /my_index/my_type/_search
{
????"query": {
????????"match_phrase": {
????????????"title": "quick brown fox"
????????}
????}
}
注:所有的term必須都出現,并且位置順序也必須一樣
?
?
GET /my_index/my_type/_search
{
????"query": {
????????"match_phrase": {
????????????"title": {
???????????? "query": "quick fox",
???????????? "slop": ?1
????????????}
????????}
????}
}
注:所有term必須全部出現,位置約束可以放寬一些(slop 控制位置約束嚴格的靈活度)
?
?
?
?
?
?
?
?
GET /my_index/my_type/_search
{
??"query": {
????"bool": {
??????"must": {
????????"match": {
??????????"title": {
????????????"query": ???????????????"quick brown fox",
????????????"minimum_should_match": "30%"
??????????}
????????}
??????},
??????"should": {
????????"match_phrase": {
??????????"title": {
????????????"query": "quick brown fox",
????????????"slop": ?50
??????????}
????????}
??????}
????}
??}
}
注:使用鄰近度來提高相關度,這樣可以返回較多的結果,且鄰近度高的會排在前面。
?
?
GET /my_index/my_type/_search
{
????"query": {
????????"match": { ?
????????????"title": {
????????????????"query": ???????????????"quick brown fox",
????????????????"minimum_should_match": "30%"
????????????}
????????}
????},
????"rescore": {
????????"window_size": 50,
????????"query": { ????????
????????????"rescore_query": {
????????????????"match_phrase": {
????????????????????"title": {
????????????????????????"query": "quick brown fox",
????????????????????????"slop": ?50
????????????????????}
????????????????}
????????????}
????????}
????}
}
注:
match 查詢決定哪些文檔將包含在最終結果集中,并通過 TF/IDF 排序。
window_size 是每一分片進行重新評分的頂部文檔數量。
?
?
?
PUT /my_index2
{
????"settings": {
????????"number_of_shards": 1, ?
????????"analysis": {
????????????"filter": {
????????????????"my_shingle_filter": {
????????????????????"type": ????????????"shingle",
????????????????????"min_shingle_size": 2,
????????????????????"max_shingle_size": 2,
????????????????????"output_unigrams": ?false ??
????????????????}
????????????},
????????????"analyzer": {
????????????????"my_shingle_analyzer": {
????????????????????"type": ????????????"custom",
????????????????????"tokenizer": ???????"standard",
????????????????????"filter": [
????????????????????????"lowercase",
????????????????????????"my_shingle_filter"
????????????????????]
????????????????}
????????????}
????????}
????}
}
注:
?
?
A、"min_shingle_size"和"max_shingle_size" 默認最小/最大的 shingle 大小是 2 ,所以實際上不需要設置。
B、"output_unigrams" shingle 語匯單元過濾器默認輸出 unigrams ,但是我們想讓 unigrams 和 bigrams 分開。
C、my_shingle_analyzer 使用我們常規的 my_shingles_filter 語匯單元過濾器。
?
?
GET /my_index2/_analyze?analyzer=my_shingle_analyzer
{
??"text":"Sue ate the alligator"
}
注:看下分詞效果,使用的話就直接用即可,最好把這個分詞的效果單獨存放使用。
?
?
?
?
一起來玩Elasticsearch,加我微信:wx1250134974
?
總結
以上是生活随笔為你收集整理的3-Elasticsearch深入搜索-近似匹配的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Kilav】 数据库复习资料 其一
- 下一篇: VMC(VMware on AWS)分析