我正在使用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.*"));


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

10-04 17:54