我需要你的指導設計幫助一個真實的場景。這可能是一個很長的問題,讓我儘可能簡潔地解釋它。如何提高Elasticsearch中給定搜索詞的特定文檔?
我們正在建立一個基於Elasticsearch爲我們的客戶網站的搜索體驗的搜索平臺,在索引中的文件可能是這樣的:
{ "Path":"http://www.foo.com/doc/abc/1", "Title":"Title 1", "Description":"The description of doc 1", ... }
{ "Path":"http://www.foo.com/doc/abc/2", "Title":"Title 2", "Description":"The description of doc 2", ... }
{ "Path":"http://www.foo.com/doc/abc/3", "Title":"Title 3", "Description":"The description of doc 3", ... }
...
對於每個查詢,返回的目標文件默認情況下按相關性排序,但我們的客戶也希望提高一些具體的文件對於某些關鍵字,
他們給我們像提高XML配置如下:
<boost>
<Keywords value="keyword1">
<Path rank="10000">http://www.foo.com/doc/abc/1</Path>
</Keywords>
<Keywords value="keyword2">
<Path rank="10000">http://www.foo.com/doc/abc/2</Path>
<Path rank="9900">http://www.foo.com/doc/abc/1</Path>
</Keywords>
<Keywords value="keyword3">
<Path rank="10000">http://www.foo.com/doc/abc/3</Path>
<Path rank="9900">http://www.foo.com/doc/abc/2</Path>
<Path rank="9800">http://www.foo.com/doc/abc/1</Path>
</Keywords>
</boost>
這意味着,如果用戶搜索「keyword1」,則前1個命中文檔應該是其路徑字段值爲「www.foo.com/doc/abc/1」的文檔,無論該文檔的相關性分值如何。 同樣,如果搜索「keyword3」,前3個命中文檔應該是其路徑值爲 「www.foo.com/doc/abc/3」,「www.foo.com/doc/abc/2「和」www.foo.com/doc/abc/1「。
爲了滿足這一特殊要求,我的設計,首先反轉原來提高的XML格式如下:
<boost>
<Path value="http://www.foo.com/doc/abc/1">
<keywords>
<keyword value="keyword1" rank="10000" />
<keyword value="keyword2" rank="9900" />
<keyword value="keyword3" rank="9800" />
</keywords>
</Path>
<Path value="http://www.foo.com/doc/abc/2">
<keywords>
<keyword value="keyword2" rank="10000" />
<keyword value="keyword3" rank=9900" />
</keywords>
</Path>
<Path value="http://www.foo.com/doc/abc/3">
<keywords>
<keyword value="keyword3" rank="10000" />
</keywords>
</Path>
</boost>
然後添加一個嵌套場「升壓」,其包含關鍵字/排名領域的陣列,到Elasticsearch文檔下面的例子:
{
"Boost": [
{ "keyword":"keyword1", "rank": 10000},
{ "keyword":"keyword2", "rank": 9900},
{ "keyword":"keyword3", "rank": 9800}
]
"Path":"http://www.foo.com/doc/abc/1",
"Title":"Title 1",
"Description":"The description of doc 1",
...
}
{
"Boost": [
{ "keyword":"keyword2", "rank": 10000},
{ "keyword":"keyword3", "rank": 9900}
]
"Path":"http://www.foo.com/doc/abc/2",
"Title":"Title 2",
"Description":"The description of doc 2",
...
}
{
"Boost": [
{ "keyword":"keyword3", "rank": 10000}
]
"Path":"http://www.foo.com/doc/abc/3",
"Title":"Title 3",
"Description":"The description of doc 3",
...
}
然後在查詢的時候,使用嵌套查詢來獲取給定的搜索關鍵詞的每個匹配的文檔的排名值,然後使用得分腳本通過調整相關性得分這個排名值。
由於來自增強XML的排名值比正常相關性得分(通常小於5)大得多,因此在爲給定關鍵字增強XML時配置的文檔的調整得分應該是最高分。
你認爲這是一個很好的Elasticsearch設計?任何建議更好的方法?
在此先感謝!
它與elasticsearch有什麼關係? – eliasah
對不起,您對「elasticsearch」有什麼意見?我們正在使用Elasticsearch來構建我們的搜索平臺。所以我問Elasticsearch如何做到這一點? – Youxu
我的意思是因爲我沒有看到你的問題與elasticsearch有關,所以實際上你需要基於如何做你想用elasticsearch做什麼的意見? – eliasah