2015-04-15 73 views
3

我使用彈性搜索大約一個月,我發現一件事一個查詢fuzzie,我不明白。彈性搜索模糊查詢奇怪的結果

該場景是我有一組用戶的類型和索引近10.000項目,我想搜索用戶名,並返回與模糊模式下搜索字符串匹配的所有項目,例如我的用戶是「masterviana」,如果我只用文本「mastervi」進行搜索,那麼我希望能夠使用模糊查詢來查看結果頂部的masterviana?

"fuzzy" : { 
    "public_name" : { 
     "value" :   "mastervi", 
     "boost" :   1.0, 
     "fuzziness" :  2, 
     "prefix_length" : 0, 
     "max_expansions": 100 
    } 
} 

但是我不是在第一頁看到我的用戶名(masterviana),也是我看到那些「不太類似」像我的查詢字符串的用戶名,我會告訴只有前5個安打不擴展到多後

{ 
      "_index": "username", 
      "_type": "username", 
      "_id": "2061|FZ4y1t042482S3EqobiVllmv00", 
      "_score": 9.198499, 
      "_source": { 
       "public_name": "masterv", 
       "bbid": "FZ4y1t042482S3EqobiVllmv00", 
       "hash": 2061, 
       "avata": "http://goo.gl/4CRt3v" 
      } 
     }, 
     { 
      "_index": "username", 
      "_type": "username", 
      "_id": "2048|r0I5XZ31076phruMS1gu9Hjv00", 
      "_score": 5.9688096, 
      "_source": { 
       "public_name": "project--master", 
       "bbid": "r0I5XZ31076phruMS1gu9Hjv00", 
       "hash": 2048, 
       "avata": "http://goo.gl/4CRt3vr" 
      } 
     }, 
     { 
      "_index": "username", 
      "_type": "username", 
      "_id": "1980|W5Wal166832UV5oCqUH9Vjcv00", 
      "_score": 5.7984095, 
      "_source": { 
       "public_name": "masterjv", 
       "bbid": "W5Wal166832UV5oCqUH9Vjcv00", 
       "hash": 1980, 
       "avata": "http://goo.gl/4CRt3v" 
      } 
     }, 
     { 
      "_index": "username", 
      "_type": "username", 
      "_id": "2108|Kufhm899338GPWHsuoei1HOv00", 
      "_score": 5.7984095, 
      "_source": { 
       "public_name": "master25", 
       "bbid": "Kufhm899338GPWHsuoei1HOv00", 
       "hash": 2108, 
       "avata": "http://goo.gl/4CRt3v" 
      } 
     }, 
     { 
      "_index": "username", 
      "_type": "username", 
      "_id": "1952|AtPw2a97575sC5JT406msOXv00", 
      "_score": 5.7984095, 
      "_source": { 
       "public_name": "masterpiz", 
       "bbid": "AtPw2a97575sC5JT406msOXv00", 
       "hash": 1952, 
       "avata": "http://goo.gl/4CRt3v" 
      } 
     }, 

,你可以看到我越來越善於頂部1. masterv 2.項目主我,我認爲我的查詢「mastervi」更接近「masterviana」,使得例如「masterv」或「項目主」

還有一件事,如果我搜索完全相同的文本「masterviana」我是隻有這個項目

回答

1

排名是編輯距離和(通常無益)一個術語是多麼罕見的混合。 我不確定在這種情況下應該歸咎哪一個,但術語稀缺性排名是一個長期存在的Lucene問題。在使用FuzzyLikeThisQuery進行彈性搜索時有一個解決方法,但這可能不會持續很長時間,所以這加速了修復Lucene的需求(請參閱此處以獲取背景https://github.com/elastic/elasticsearch/pull/10391

+0

感謝您的回覆,如果我使用fuzzyLikeThis我也沒有看到我的用戶名。我正在使用像這樣「fuzzy_like_this」:{ 「fields」:[「public_name」], 「like_text」:「mastervi」 } 但同樣的事情發生了,是否有這樣做的方法,而這個問題解決了嗎? – mastervv

+1

_explain API可以幫助揭示單個匹配背後的詳細評分邏輯。 FuzzyLikeThis應該已經消除了方程中的稀缺性,但mastervi在技術上比masterviana更接近mastervi,因爲它只是Levenstein編輯距離度量方面的一個字符變化 – MarkH