当前位置 : 主页 > 网络推广 > seo >

如何检索Lucene中“击中”的字段

来源:互联网 收集:自由互联 发布时间:2021-06-16
也许我真的错过了什么. 我已经在Lucene中索引了一堆键/值对(v4.1,如果重要的话).说我有 key1 = value1和key2 = value2,例如从属性文件中读取. 它们被索引为特定字段并被编入一个笼统的“ALL”
也许我真的错过了什么.

我已经在Lucene中索引了一堆键/值对(v4.1,如果重要的话).说我有
key1 = value1和key2 = value2,例如从属性文件中读取.

它们被索引为特定字段并被编入一个笼统的“ALL”字段,例如

new Field("key1", "value1", aFieldTypeMimickingKeywords);
new Field("key2", "value2", aFieldTypeMimickingKeywords);
new Field("ALL", "key1=value1", aFieldTypeMimickingKeywords);
new Field("ALL", "key2=value2", aFieldTypeMimickingKeywords);
// then get added to the Document of course...

然后,我可以使用通配符搜索

new WildcardQuery(new Term("ALL", "*alue1"));

它会找到命中.

但是,获得更多信息会更好,例如“什么是完整的价值(例如”key1 = value1“)与该命中一起?”.

最好的我可以找到它来获取Document,然后获取IndexableFields的列表,然后循环遍历所有这些并查看field.stringValue().contains(“alue1”). (我可以查看调试器中的数据结构,所有信息都在那里)

这似乎完全是疯了导致Lucene刚刚做了什么?命中信息不应该返回一些字段吗?

Lucene是否错过了看似“明显”的功能?谷歌和从API开始并没有透露任何直截了当的东西,但我觉得我必须在搜索错误的东西.

您可能想尝试使用 IndexSearcher.explain()方法.获得匹配文档的ID后,为每个字段准备一个查询(使用相同的搜索关键字)并为每个查询调用 Explanation.isMatch():产生true的那些将为您提供匹配的字段.例:

for (String field: fields){
    Query query = new WildcardQuery(new Term(field, "*alue1"));
    Explanation ex = searcher.explain(query, docID);
    if (ex.isMatch()){
        //Your query matched field
    }
}
网友评论