我正在使用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.*"));
如何实现这一目标?
打印的查询为::::名称:/C.* O。* /
最佳答案
您的正则表达式贪婪,请改用此:
RegexpQuery dynamicRegEx3 = new RegexpQuery(new Term("name", "C[^ ]* O.*"));
[^ ]
代表任何非空格字符。