首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Lucene在RegexQuery中的得分结果如何?

问Lucene在RegexQuery中的得分结果如何?
EN

Stack Overflow用户
提问于 2010-09-28 17:16:44
回答 2查看 892关注 0票数 2

我可以看到,在进行常规/模糊全文搜索时,如何比较两个值,以确定哪个值“更好”(即一个值包含的关键字比另一个多,一个值包含的非关键字比另一个少)。

但是,当使用RegexQuery进行正则表达式查询时,Lucene如何计算分数?它是一个布尔查询--一个字段的值是否与正则表达式兼容。Lucene不能从我的regex查询中提取关键字并像往常一样变魔术……

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-09-28 22:40:39

有两个通行证。在第一个示例中,它生成与正则表达式匹配的所有术语的列表。在第二个示例中,它查找与该正则表达式匹配的所有文档。

您要查看的主要代码在MultiTermQuery中:

代码语言:javascript
复制
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;
}

两件事:

  1. 使用coord on实例化布尔查询。所以标准的coord评分是适用的(也就是说,你得到的词越多越好)。
  2. 查询词的增强是由enumerator.difference()给出的。但是,从3.0.1开始,它只返回1:@Override public final float difference() { // TODO:根据searchTerm.text()和term()的距离调整差异.text()返回1.0f;}

因此,在某一时刻,这将返回两个项之间的距离(可能是levenstein)。但就目前而言,它什么也做不了。

票数 4
EN

Stack Overflow用户

发布于 2010-09-28 18:43:33

这只是一个胡乱猜测,但一个可能的指标可能是正则表达式引擎需要采取的回溯步骤数来匹配您的搜索字符串。

当然,这些值也在很大程度上取决于您的正则表达式的质量,但在比较几个匹配项时,“更容易匹配”的值可以被认为是比regex引擎必须经过扭曲的匹配更好的匹配项。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3811286

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档