1

我正在尝试使用 Lucene 在数据库中搜索名称。但是,有些名称包含诸如“NOT”和“OR”之类的词,甚至包含“-”减号。我仍然希望使用分析器将名称中的不同标记分解并作为术语的布尔组合进行搜索,但我不希望 Lucene 将任何“NOT”/“OR”术语解释为运算符(而不是我希望它们像正常术语一样被搜索)。

完成我所说的一种方法是在搜索查询上手动运行分析器,然后根据所有结果标记手动构造一个布尔查询。这是最好的方法吗?我的印象是分析器被设计为与查询解析器一起使用,我觉得应该有一个内置的方法来完成我想要做的事情。有人知道最好的方法吗?

4

1 回答 1

1

您自己建议的从 TokenStream 构造 BooleanQuery 的方法是完全有意义的。QueryParser API 实际上只是用于使用特定语法解析结构化查询 - 如果您不利用查询解析器语法,我认为没有理由使用 QueryParser 而不是手动构建的 BooleanQuery。

但是,如果您使用 StandardAnalyzer(或其他带有 StopFilter 的分析器)来索引您的字段,则不会对诸如“AND”、“NOT”和“OR”之类的词进行索引,并且无法对其进行搜索。因此,在这种情况下,您可以使用正则表达式轻松地将“-”和“+”等单词和运算符从查询中删除。不过,我会尽快推荐 BooleanQuery 方法。

于 2009-12-22T21:03:55.833 回答