2016-08-14 47 views
0

這個查詢,其搜索單詞little如何啓用全域前綴匹配在elasticsearch查詢

{ 
    "query": { 
     "match": { 
      "title": { 
       "max_expansions": 20, 
       "prefix_length": 3, 
       "query": "little", 
       "slop": 1, 
       "type": "phrase_prefix" 
      } 
     } 
    } 
} 

返回匹配以下

"title": "Little Gem" 
"title": "Little Szechuan" 

但是,如果我改變這個詞來little s,我期待"Little Szechuan"匹配。

下面的查詢將獲得零匹配

{ 
    "query": { 
     "match": { 
      "title": { 
       "max_expansions": 20, 
       "prefix_length": 3, 
       "query": "little", 
       "slop": 1, 
       "type": "phrase_prefix" 
      } 
     } 
    } 
} 

我也試圖調整prefix_length 1,目前仍然沒有比賽

這是用於title

 "title": { 
     "type": "string", 
     "analyzer": "my_analyzer" 
     }, 
映射

這裏是分析儀用於title

"analysis": { 
     "analyzer": { 
     "my_analyzer": { 
      "filter": [ 
      "standard", 
      "lowercase", 
      "my_snow" 
      ], 
      "tokenizer": "standard" 
     } 
     }, 
     "filter": { 
     "my_snow": { 
      "type": "snowball", 
      "language": "English" 
     } 
     } 
    }, 
+1

什麼是「標題」的映射? – kcdragon

+0

@kcdragon請參閱更新 – samol

回答

0

我無法僅用兩個文檔重現此問題。

curl -XPUT "http://localhost:9200/test" -d' 
{ 
    "settings": { 
     "analysis": { 
     "analyzer": { 
      "my_analyzer": { 
       "filter": [ 
        "standard", 
        "lowercase", 
        "my_snow" 
       ], 
       "tokenizer": "standard" 
      } 
     }, 
     "filter": { 
      "my_snow": { 
       "type": "snowball", 
       "language": "English" 
      } 
     } 
     } 
    } 
}' 

curl -XPUT "http://localhost:9200/test/_mapping/test" -d' 
{ 
    "test": { 
     "properties": { 
     "title": { 
      "type": "string", 
      "analyzer": "my_analyzer" 
     } 
     } 
    } 
}' 

curl -XPUT "http://localhost:9200/test/test/1" -d' 
{ 
    "title": "Little Gem" 
}' 

curl -XPUT "http://localhost:9200/test/test/2" -d' 
{ 
    "title": "Little Szechuan" 
}' 

curl -XGET "http://localhost:9200/test/test/_search" -d' 
{ 
    "query": { 
     "match": { 
      "title": { 
       "max_expansions": 20, 
       "prefix_length": 3, 
       "query": "little s", 
       "slop": 1, 
       "type": "phrase_prefix" 
      } 
     } 
    } 
}' 

我想知道,如果你正在運行到在https://www.elastic.co/guide/en/elasticsearch/reference/master/query-dsl-match-query-phrase-prefix.html

底部描述的限制,考慮查詢字符串敏捷的棕色F。此查詢通過創建快速和棕色短語查詢(即術語快速必須存在並且必須跟隨術語布朗)來工作。然後它查看已排序的詞典詞典以查找以f開頭的前50個詞條,並將這些詞條添加到詞組查詢中。

索引/類型中有多少個文檔的標題以「s」開頭?你可以嘗試增加最大的擴展,這應該以性能爲代價找到更多的條款。

+0

好點。我將我的max_expansions設置爲50000,並設法獲得所需的行爲。你有建議,我應該如何索引這個領域的不同? (而不是設置這麼大的最大epansions) – samol

+0

在同一頁上的文檔提到使用「完成建議者」,但它似乎尚未發佈。我看到兩個選項:1.如果可以將它設置爲合理的數字,請增加max_expansions; 2.如果查詢中只有一個字符,請不要在查詢中包含「單詞」。您可以在應用程序級別或ES中執行此操作(如果支持)。這個想法是一個查詢「小s」會像「小」的查詢,但查詢「小sz」會做一個查詢「小sz」 – kcdragon

+0

@samol如果這解決了你的問題,你會介意標記它作爲答案。如果沒有,請讓我知道你錯過了什麼。 – kcdragon