我可以看到,在进行常规/模糊全文搜索时,如何比较两个值,以确定哪个值“更好”(即一个值包含的关键字比另一个多,一个值包含的非关键字比另一个少)。
但是,当使用RegexQuery进行正则表达式查询时,Lucene如何计算分数?它是一个布尔查询--一个字段的值是否与正则表达式兼容。Lucene不能从我的regex查询中提取关键字并像往常一样变魔术……
发布于 2010-09-28 22:40:39
有两个通行证。在第一个示例中,它生成与正则表达式匹配的所有术语的列表。在第二个示例中,它查找与该正则表达式匹配的所有文档。
您要查看的主要代码在MultiTermQuery中:
public Query rewrite(IndexReader reader) throws IOException {
FilteredTermEnum enumerator = getEnum(reader);
BooleanQuery query = new BooleanQuery();
try {
do {
Term t = enumerator.term();
if (t != null) {
TermQuery tq = new TermQuery(t); // found a match
tq.setBoost(getBoost() * enumerator.difference()); // set the boost
query.add(tq, false, false); // add to query
}
} while (enumerator.next());
} finally {
enumerator.close();
}
return query;
}两件事:
因此,在某一时刻,这将返回两个项之间的距离(可能是levenstein)。但就目前而言,它什么也做不了。
发布于 2010-09-28 18:43:33
这只是一个胡乱猜测,但一个可能的指标可能是正则表达式引擎需要采取的回溯步骤数来匹配您的搜索字符串。
当然,这些值也在很大程度上取决于您的正则表达式的质量,但在比较几个匹配项时,“更容易匹配”的值可以被认为是比regex引擎必须经过扭曲的匹配更好的匹配项。
https://stackoverflow.com/questions/3811286
复制相似问题