2013-12-11 24 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