【问题标题】:Lucene.net - query returning unwanted documentsLucene.net - 查询返回不需要的文档
【发布时间】:2012-08-27 16:59:00
【问题描述】:

我所有的 Lucene.net (2.9.2) 文档都有两个字段:

  • 类别ID
  • 正文

bodytext 是默认字段,是存储所有文档文本的位置(使用 Field.Store.NO , Field.Index.ANALYZED, Field.TermVector.WITH_POSITIONS_OFFSETS )。

categoryid 只是一个存储为文本的数字字段:Field.Store.YES, Field.Index.NOT_ANALYZED

执行此查询时,它只返回具有该类别 ID 的文档:categoryid:1

但是,当我执行此查询时:categoryid:1 foo bar 它会返回除 1 之外的其他类别的文​​档。

这是为什么?以及如何强制它尊重原始的categoryid:N 查询词?

【问题讨论】:

    标签: lucene lucene.net


    【解决方案1】:

    您想要求输入的所有单词都出现在匹配的文档中吗?

    var analyzer = new StandardAnalyzer(Version.LUCENE_30);
    var queryParser = new QueryParser(Version.LUCENE_30, "bodytext", analyzer);
    
    // This ensures that all terms are required.
    queryParser.DefaultOperator = QueryParser.Operator.AND;
    
    var query = queryParser.Parse("categoryid:1 foo bar");
    // query = "+categoryid:1 +bodytext:foo +bodytext:bar"
    

    【讨论】:

    • Lucene 中是否默认使用 OR 运算符而不是 AND?
    • @David,准确地说。它可以更好地处理拼写错误的单词;导致它们被忽略而不是空的搜索结果。
    • 在 2.9 版中,语法略有不同:queryParser.SetDefaultOperator(QueryParser.AND_OPERATOR)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多