【问题标题】:How to parse lucene String queries that use spanNot and spanNear如何解析使用 spanNot 和 spanNear 的 lucene 字符串查询
【发布时间】:2012-01-09 20:48:05
【问题描述】:

如果我有以下 lucene 查询作为字符串,是否可以使用现有的 lucene 库来解析它?

+spanNot(spanNear([text:word1, text:word2], 10, true), text:mydelimiter)

我使用的是 lucene 3.0.0。我已经在核心中尝试了 QueryParser,它没有错误,但创建了一个不正确的 BooleanQuery。我还尝试了 lucene-contrib 和 org.apache.lucene.queryParser.surround.parser.QueryParser 中的 StandardQueryParser(也提供 BooleanQuery),这会导致错误(遇到 ""(""(""....)

在代码中构造等效查询是我唯一的选择吗?

(仅供参考,我的总体目标是在同一个句子中以任意顺序查找术语,方法是在索引之前将文档中的句子结束句点替换为“mydelimiter”。)

【问题讨论】:

    标签: java lucene


    【解决方案1】:

    来自行动手册中的 Lucene:

    QueryParser 不支持任何 SpanQuery 类型,但是 Lucene 的 contrib 模块中的环绕 QueryParser 确实如此。

    以下是环绕解析器语法的示例:

    aa NOT bb NOT cc – same effect as: (aa NOT bb) NOT cc
    and(aa,bb,cc) – aa and bb and cc
    99w(aa,bb,cc) - ordered span query with slop 98
    99n(aa,bb,cc) – unordered span query with slop 98
    

    看来您必须更改语法以符合这一语法并使用环绕解析器或扩展 QueryParser。

    【讨论】:

    • 我在问题中提到我尝试过这个并遇到错误。我的查询字符串语法可能有错误吗?
    • 是的,书中的例子语法不同。
    • 谢谢,我看看能否从 svn 中的单元测试中找出 contrib 模块的语法。
    • 我无法将 spanNear 嵌套在 spanNot 中使用环绕解析器语法。这可能是可能的,但我不这么认为。我最终求助于为查询定义自己的字符串格式,并扩展查询解析器以编程方式构造查询。
    猜你喜欢
    • 1970-01-01
    • 2015-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-22
    • 2019-05-03
    相关资源
    最近更新 更多