代码之家  ›  专栏  ›  技术社区  ›  ghempton

不带运算符的Lucene查询

  •  1
  • ghempton  · 技术社区  · 15 年前

    我正试图用Lucene在数据库中搜索名字。但是,有些名称包含“not”和“or”甚至“-”等减号。我仍然希望使用分析器将名称中的不同标记分解,并将其作为术语的布尔组合进行搜索,但我不希望Lucene将任何“not”/“或”术语解释为运算符(相反,我希望它们像普通术语一样进行搜索)。

    实现我所说的一种方法是在搜索查询上手动运行分析器,然后根据所有生成的标记手动构造布尔查询。这是最好的方法吗?我觉得分析器是为与查询分析器结合使用而设计的,我觉得应该有一种内置的方式来完成我正在尝试的工作。有人知道最好的方法吗?

    1 回复  |  直到 9 年前
        1
  •  1
  •   Alex Vigdor    15 年前

    您自己建议的从令牌流构造布尔查询的方法完全有意义。QueryParser API实际上只用于使用特定语法分析结构化查询-如果您不使用查询分析器语法,我看不到在手动构造的布尔查询上使用QueryParser的任何原因。

    但是,如果使用标准分析器(或另一个带有StopFilter的分析器)对字段进行索引,则“and”、“not”和“or”等单词将不会被索引,并且无法在上面搜索。因此,在这种情况下,您可以使用正则表达式轻松地从查询中删除“-”和“+”等单词和运算符。不过,我还是建议采用粗暴的方式。