我正在尋找對付elasticsearch的相關性,爲像「瓶」的文件名稱和「瓶蓋」的做法文檔Elasticsearch相關性進行具有類似名稱
當有人尋找一個「瓶」(搜索詞), - 「瓶蓋」應該低於「紅色瓶子」。
目前我們的搜索引擎分數「紅色瓶」比「瓶蓋的一瓶500毫升」
我正在尋找對付elasticsearch的相關性,爲像「瓶」的文件名稱和「瓶蓋」的做法文檔Elasticsearch相關性進行具有類似名稱
當有人尋找一個「瓶」(搜索詞), - 「瓶蓋」應該低於「紅色瓶子」。
目前我們的搜索引擎分數「紅色瓶」比「瓶蓋的一瓶500毫升」
這是不是你可以在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"}
}
}
謝謝dshockley。我必須仔細檢查是否可以避免手動產品標記。我不知道文檔在eBay這樣的大型市場中手動標記,其中較高的期限頻率並不一定意味着更高的相關性。他們是否把它賣給賣家,以正確地分類他們的產品? – vishnu
你當然可以嘗試自動標記,但你可能想從一些標記的訓練數據開始。你也可以嘗試一些NLP方法(做POS標記,然後添加標記爲NNS的任何東西 - 這對你的例子會有幫助,但我不確定它是否會傷害其他地方)。我不知道易趣/亞馬遜市場/等是否做任何自動標記或只依靠賣家。如果我必須設計它,我可能會依靠賣家,但使用自動技術來標記可能被錯誤分類以供審查的商品。 – dshockley