2016-02-24 92 views
0

我已經使用Edge N gram.i編制了我的技術數據庫的索引,我使用了以下代碼。彈性搜索自動完成,用空間搜索創建問題

{"settings": { 
    "analysis": { 
     "analyzer": { 
      "standardWithEdgeNGram": { 
       "tokenizer": "standard", 
       "filter": ["lowercase", "edgeNGram"] 
      } 
     }, 
     "tokenizer": { 
      "standard": { 
       "type": "standard" 
      } 
     }, 
     "filter": { 
      "lowercase": { 
       "type": "lowercase" 
      }, 
      "edgeNGram": { 
       "type": "edgeNGram", 
       "min_gram": 1, 
       "max_gram": 15, 
       "token_chars": ["letter", "digit","punctuation","whitespace","symbol"] 
      } 
     } 
    }},"mappings": { "technologies":{ 
    "properties":{ 
       "application": { 
        "type" : "string", 
        "index": "not_analyzed" 

     } 

     } 

    } 
} 

與此代碼我能夠搜索內容。但我的問題是當我搜索內容與空間它不會產生所需的結果。

例如 如果我搜索「紅寶石」我得到的輸出爲「軌道上的紅寶石」,但如果我搜索「紅寶石SER」它會給出輸出,如「軌道上的紅寶石」,「Windows服務器」等,但它應該基本上給我任何輸出.... plzzz幫助

回答

0

應用「在上面的代碼是not_analyzed這意味着該內容將不會被標記化,因此,當你搜索‘紅寶石’或‘紅寶石SER’兩者都不應該給出結果,因爲該值存儲爲「ruby on rails」

您是否正在使用elasticsearch的head插件來運行q uery使用「GET」? 如果是的話嘗試使用POST,GET有一個ES頭插件的問題,似乎與GET身體沒有發送到elasticsearch,因爲發送一個空的_search請求返回索引中發生在這種情況下的所有記錄。

如果你想使用ES頭插件,然後嘗試用_source合併與_search參數查詢像下面GET:

_search?source={"query":{"match":{"application": "ruby rails"}}} 

看一看的URI請求,這允許您發送基本查詢使用URI內的參數q