2013-12-11 41 views
0

我已經爲包含詞性(POS)標籤的有效載荷的每個單詞索引了文檔。 我只想搜索那些搜索查詢詞有那個POS標籤的文檔。 例如'訪問谷歌'有谷歌作爲名詞。它應該只顯示Google的文檔作爲名詞。 可以編寫自定義分析器幫助嗎? 如何在「相似」類中訪問「有效載荷」時訪問術語?使用有效載荷和NLP標籤進行Lucene搜索

回答

0

在lucene中進行精確(:google AND:'名詞')查詢可能會非常棘手......您的查詢是什麼以及如何將文檔寫入索引?

0

我會推薦使用跨度查詢。跨度查詢可以返回一個Spans對象,它允許檢查每個匹配令牌的有效負載。

請參閱PayloadTermQuery。

0

您可以使用PayloadAttribute類將標記存儲爲有效內容,然後覆蓋DefaultSimilarity類的scorePayload方法以使用標記。在你的情況下,如果標籤內容是名詞,你會希望返回1,否則返回零。

下面的代碼片段是有用的設置有效載荷信息

String tag = "noun"; 
    byte[] payload = tag.getBytes(); 
    Payload payloadData = new Payload(payload); 
    payloadAttr.setPayload(payloadData); 

現在使用下面的代碼行檢索過程中儘量使用標籤。這必須通過擴展DefaultSimilarity類來完成。

class PayloadSimilarity extends DefaultSimilarity { 
    ... 
    ... 
    protected float scorePayload(int doc, int start, int end, BytesRef payload) { 
     String payloadData = payload.utf8ToString(); 
     return payloadData.equals("noun")? 1 : 0; 
    } 
    ... 
    ... 
    }  

最後,在檢索過程中,只需設置您的擴展類的相似性類即可。

searcher.setSimilarity(new PayloadSimilarity()); 
+0

但是,這總是會壓制動詞。 – user2377122