2017-09-06 87 views
0

我正在尋找對付elasticsearch的相關性,爲像「瓶」的文件名稱和「瓶蓋」的做法文檔Elasticsearch相關性進行具有類似名稱

當有人尋找一個「瓶」(搜索詞), - 「瓶蓋」應該低於「紅色瓶子」。

目前我們的搜索引擎分數「紅色瓶」比「瓶蓋的一瓶500毫升」

回答

1

這是不是你可以在Elasticsearch解決相關性較低,無需添加更多的信息。你想在「瓶蓋」上排列「紅色瓶子」,因爲你知道關於這些名字的語義信息 - 你知道「紅色瓶子」意味着它所談論的是一個「瓶子」,而「瓶蓋」意味着這個事物它談論的是別的東西(與瓶子有關,但實際上不是瓶子)。如果您希望Elasticsearch的排名考慮這些信息,您必須爲信息編制索引(可能需要添加關鍵字標籤字段,其中一個包含「瓶子」,另一個包含「瓶蓋」),您必須嘗試查看哪些方法可行與你的用例)。當然,這意味着一個人必須爲所有事物添加廣告標籤。

但是,我懷疑你可以通過unique filter改善一些情況。我的猜測是,你並不關心單個標題中的詞頻問題(「500毫升瓶裝瓶蓋」不是關於瓶子的更多信息,因爲「瓶子」出現兩次 - 詞頻對於標題沒有多大意義這我想)。所以,你可以做這樣的事情:如果你搜索bottle

PUT /myindex 
{ 
    "settings": { 
    "index": { 
     "number_of_shards": 1 
    }, 
    "analysis": { 
     "analyzer": { 
     "uniq_analyzer": { 
      "type": "custom", 
      "tokenizer": "standard", 
      "filter": [ 
      "lowercase", 
      "porter_stem", 
      "unique" 
      ] 
     } 
     } 
    } 
    }, 
    "mappings": { 
    "doc": { 
     "properties": { 
     "name": { 
      "type": "text", 
      "analyzer": "uniq_analyzer" 
     } 
     } 
    } 
    } 
} 

PUT /myindex/doc/1 
{"name": "Red coloured bottles"} 

PUT /myindex/doc/2 
{"name": "Bottle caps for 500ml bottle"} 

然後,你會看到分數是相同的 - 不完美,但有所改善。如果您想了解分數來自哪裏,您可以使用explain

POST /myindex 
{ 
    "explain": true, 
    "query": { 
    "match": 
     {"name": "bottle"} 
    } 
} 
+0

謝謝dshockley。我必須仔細檢查是否可以避免手動產品標記。我不知道文檔在eBay這樣的大型市場中手動標記,其中較高的期限頻率並不一定意味着更高的相關性。他們是否把它賣給賣家,以正確地分類他們的產品? – vishnu

+0

你當然可以嘗試自動標記,但你可能想從一些標記的訓練數據開始。你也可以嘗試一些NLP方法(做POS標記,然後添加標記爲NNS的任何東西 - 這對你的例子會有幫助,但我不確定它是否會傷害其他地方)。我不知道易趣/亞馬遜市場/等是否做任何自動標記或只依靠賣家。如果我必須設計它,我可能會依靠賣家,但使用自動技術來標記可能被錯誤分類以供審查的商品。 – dshockley