java - 没有运算符的 Lucene 查询

标签 java search lucene tokenize fuzzy-search

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

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

最佳答案

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

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

关于java - 没有运算符的 Lucene 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1948689/

相关文章:

lucene - 如何修复损坏的lucene索引?

java - Lucene如何缓存数据?

java - 我如何映射 Java 中的数组?

java - 多线程声明期间静态变量初始化

java - 不使用正则表达式的 Java 字符串搜索库

search - ElasticSearch:即使一个字段不匹配,也显示多搜索的部分匹配

java - JVM 可以在应用程序运行时(突然)杀死计时器/守护线程吗?

java - 具有默认构造函数的抽象类和具有私有(private)构造函数的类的区别

javascript - 用于解析搜索字段中关键字和标签的正则表达式 ([])

java - 使用 Hibernate 搜索进行搜索