[英]Is it possible to search for words inside a Lucene index by part of speech
我有一大堆文檔存儲在Lucene索引中,我使用的是customAnalyzer,它基本上為文檔內容進行標記化和源代碼。
現在,如果我在文檔中搜索單詞“love”,我會得到結果,其中愛被用作名詞或動詞,而我只想要那些僅用愛作為動詞的文檔。
如何才能實現這樣的功能,我還可以提到單詞的詞性以及單詞,這樣結果只能用作動詞而不是名詞?
我可以想出一種方法,最初通過詞性標記文檔的每個單詞並通過附加帶有“_”或其他東西的單詞來存儲它然后進行相應的搜索,但是想知道是否存在在Lucene做到這一點的更聰明的方法。
我可以想到以下方法。
方法1
就像你提到的那樣:在索引時識別並將詞性標記附加到實際術語。 查詢時也一樣。
我想討論相關的利弊。
缺點:
1)未來的要求可能要求您獲得結果而不管詞性。 包含已修改術語的索引將不起作用。
2)您可能希望執行類似“term:noun或adjective”的BooleanQuery。 你自己編寫查詢擴展器。
方法2
嘗試使用Lucene的Payloads功能。
這是Lucene Payloads的簡要教程 。
解決您的用例的步驟。
1)以有效載荷的形式存儲詞性標簽。
2)為每個詞性標簽定制相似度類。
3)根據查詢,將相應的CustomSimilarity分配給IndexSearcher。 例如,為名詞查詢指定NounBoostingSimilarity。
4)基於Payload提升或“降低”文檔的分數。 上面教程中給出的示例。
5)編寫一個自定義收集器來過濾掉不符合上述得分提升邏輯的分數的文檔。
這種方法的優點是索引保持與任何其他正常搜索兼容。
缺點:
1)維護開銷:必須為每個相似性維護多個IndexSearchers。 2)有點復雜的代碼解決方案。
坦率地說,我對自己的解決方案並不滿意,但只是想讓你知道存在另一種方式。 這完全取決於您的場景,項目是學術性的一次性項目還是商業項目等。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.