java - Lucene 中的正则表达式查询

标签 java regex lucene

我正在使用 lucene 搜索,我有类似的名称列表

1) CITY OF CAIRO

2) CALICUT OFFICIAL BRANCH

3) CAIRO BRANCH OFFICE

如果用户输入“CO”,则必须输入以“C”开头的名称,第二个单词应以“O”开头,它应返回第一个名称(CITY OF CAIRO)和第二个名称(CALICUT OFFICIAL BRANCH)。第三个名称(CAIRO BRANCH OFFICE)名称不应返回,因为它没有第二个单词以“O”开头。我正在使用 RegexpQuery 查询。它列出了上述所有 3 个错误的名称。

RegexpQuery dynamicRegEx3 = new RegexpQuery(new Term("name", "C.* O.*"));

实现这个目标的方法是什么?

打印的查询是::::name:/C.* O.*/

最佳答案

你的正则表达式是贪婪的,请改用这个:

RegexpQuery dynamicRegEx3 = new RegexpQuery(new Term("name", "C[^ ]* O.*"));

[^ ] 代表任何非空格的字符。

关于java - Lucene 中的正则表达式查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24305215/

相关文章:

java - 如何使构造函数的参数可从实例初始化程序中获取?

regex - 不在正则表达式中

Javascript 正则表达式匹配太多字符

java - Lucene拆分包: module reads package 'org.apache.lucene.analysis.standard' from both 'lucene.analyzers.common' and 'lucene.core'

lucene - 搜索索引复制

java - 为什么 java Android 中的 super.onDestroy() 在析构函数中居于首位?

java - Logstash stdout - 写入文件

java - 获取客户端Windows用户名

regex - [0-9]* 和 [0-9] 之间的差异

elasticsearch - Elasticsearch发布荧光笔返回太多句子