我已经使用包含词性(POS)标记的有效负载的每个单词索引文档。 我想只搜索那些搜索查询字具有该POS标记的文档。 例如。 “访问谷歌”已谷歌作为名词。它应该只显示谷歌作为名词的文档。 可以编写自定义分析器吗? 如何在Similarity类中访问Payload时访问Term?
答案 0 :(得分:0)
在lucene中执行完全(:google AND:'noun')查询可能很棘手...您的查询是什么以及如何将文档编写到索引中?
答案 1 :(得分:0)
我建议使用跨度查询。跨度查询可以返回Spans对象,该对象允许检查每个匹配令牌的有效负载。
请参阅PayloadTermQuery。
答案 2 :(得分: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());