2015-03-19 89 views
1

目前我在elasticsearch指數的標題有一個項目:testing123Elasticsearch - 不要求完全匹配

當我尋找它,我只能得到它回來,如果我搜索testing123準確。但是,我希望能夠搜索testing並讓它返回。

我該怎麼做才能使搜索必須以該詞開頭,但也不能完全匹配?

任何幫助,將不勝感激。

回答

1

使用Simple Analyzer在映射。

創建其中title場使用了兩種標準(默認)和簡單分析索引的索引:

POST /demo 
{ 
    "mappings": { 
     "doc": { 
      "properties": { 
       "title": { 
        "type": "string", 
        "fields": { 
         "simple": { 
          "type": "string", 
          "analyzer": "simple" 
         } 
        } 
       } 
      } 
     } 
    } 
} 

指數文檔

POST /demo/doc/1 
{ 
    "title": "testing123" 
} 

最後,使用multi_match查詢搜索:

POST /demo/doc/_search 
{ 
    "query": { 
     "multi_match": { 
      "fields": [ 
       "title", 
       "title.simple" 
      ], 
      "query": "testing" 
     } 
    } 
} 

此查詢返回文檔噸。如果您要將查詢字詞更改爲testing123,則也會有匹配項。

另一種可能的解決方案是使用Prefix Query

1

我相信你在尋找wildcards

匹配具有匹配通配符表達式的字段的文檔。支持的通配符是*,它匹配任何字符序列(包括空字符)和?,它匹配任何單個字符。

通配符基本上是「匹配任何東西」。所以,你的搜索看起來像

testing* 

這將匹配

測試

是testing123

testingthings

但是不匹配

test123ing

測試

+0

雖然通配符確實達到了正確的結果,但我不希望用戶必須這樣做才能達到目的。有沒有建立,因爲我相信solr有這個。 – Jimmy 2015-03-19 13:05:34