[英]How do i implement tag searching? with lucene?
我沒用過lucene。 上次我問(很多個月前,也許是一年前)人們建議使用 lucene。 如果我不應該使用 lucene,我應該使用什么? 例如,說有這樣標記的項目
如果用戶搜索蘋果,我不在乎 1,2 和 4 是否有任何偏好。但是我看到很多論壇都這樣做,我討厭當用戶搜索蘋果胡蘿卜 2 和 3 的結果很高而 1 甚至很難找到時雖然它更符合我的搜索。
此外,我希望能夠搜索胡蘿卜 - 蘋果,這只會讓我得到 3。我不確定如果我搜索胡蘿卜香蕉會發生什么,但無論如何,只要標記為 2 和 3 結果的更多項目的排名低於 1 時我搜索蘋果胡蘿卜我會很高興的。
lucene可以做到這一點嗎? 我從哪里開始? 我嘗試查找它,當我查找它時,我會看到很多類,我會看到有關文檔、網頁的教程,但沒有人清楚當我喜歡標記某些東西時該做什么。 如果不是lucene,我應該用什么來標記?
編輯:您可以使用 Lucene。 這是如何在 Lucene.net 中執行此操作的說明。 一些 Lucene 基礎知識是:
請閱讀這篇關於創建和使用 Lucene.net 索引的博客文章。
我假設您正在標記博客文章。 如果我完全錯了,請說出來。 為了搜索標簽,您需要將它們表示為 Lucene 實體,即“標簽”字段內的標記。
這樣做的一種方法是為每個博客文章分配一個 Lucene 文檔。 該文檔至少包含以下字段:
索引:每當您向帖子添加標簽、刪除標簽或對其進行編輯時,您都需要為帖子建立索引。 分析器會將字段轉換為它們的標記表示。
Document doc = new Document();
doc.Add(new Field("id", i.ToString(), Field.Store.YES, Field.Index.NO));
doc.Add(new Field("content", text, Field.Store.YES, Field.Index.TOKENIZED));
doc.Add(new Field("tags", tags, Field.Store.YES, Field.Index.TOKENIZED));
writer.AddDocument(doc);
剩下的部分是檢索。 為此,您需要創建一個QueryParser並向其傳遞一個查詢字符串,如下所示:
QueryParser qp = new QueryParser();
Query q = qp.Parse(s);
Hits = Searcher.Search(q);
s 所需的語法是:
tags: apples tags: carrots
搜索蘋果或胡蘿卜
tags: carrots NOT tags: apples
有關構造 s 的詳細信息,請參閱Lucene 查詢解析器語法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.