Lucene查询没有运营商

时间:2009-12-22 19:47:30

标签: java search lucene tokenize fuzzy-search

我正在尝试使用Lucene来搜索数据库中的名称。但是,某些名称包含“NOT”和“OR”之类的单词,甚至包含“ - ”减去符号。我仍然希望使用Analyzer将名称中的不同标记拆分并作为布尔条件组合进行搜索,但我不希望Lucene将任何“NOT”/“OR”术语解释为运算符(而是我希望他们像普通条款一样被搜查。)

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

1 个答案:

答案 0 :(得分:1)

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

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

相关问题