簡體   English   中英

如何在Solr / Elasticsearch / Sphinx中考慮搜索局部性?

[英]Way to factor in search locality in Solr/Elasticsearch/Sphinx?

我的問題是搜索成千上萬個用戶的數據,例如郵箱。 幾乎所有時間搜索都是通過用戶ID過濾的。 如何考慮搜索的本地性? 我正在嘗試實現與每個用戶都有專用索引的情況相當的性能。

分片不是一種選擇,因為它將被使用(用戶總數〜1M),並且我正在尋找在約4k用戶的分片內使用的解決方案。

好吧,可以在帶有屬性的Sphinx中完成。 在大多數情況下,也可以通過將用戶ID添加為假關鍵字來提高搜索效率*。 然后,可以在全文階段過濾文檔。 (也仍然保留該屬性,以免通過構造一個仔細的查詢以從其他用戶返回結果來避免操縱結果的可能性)

  • 例如,將_user1234添加為全文字段,然后添加到查詢WHERE MATCH('example _user1234') AND user = 1234然后僅從該用戶中查找文檔。

一種可能的解決方案是將同一用戶的文檔分組在倒排索引塊中。 假定反向索引塊按文檔ID排序,則只能通過將ID適當地分配給文檔來完成這種分組。 同一用戶的文檔應具有單調ID。 可能會輕微違反此規則-不會顯着損害性能。

實現。

索引排序剛剛成為Lucene 6.21中的一等公民

可以在elasticsearch 2.3中實現(請參閱此處 )。 而且我認為以相同的方式在Solr中可以實現。

至於獅身人面像,我認為分配單調文檔ID的相同技術應該起作用。

有關更多技術推理,請參閱上一個鏈接。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM