Как написать запрос Lucene, который возвращает все слова, содержащие букву "t"? - PullRequest
1 голос
/ 01 февраля 2010

Я попробовал этот пример кода Lucene, который работал:
http://snippets.dzone.com/posts/show/8965

Однако меняется:
Query query = parser.parse ("st.");
до
Query query = parser.parse ("t");

вернул ноль хитов.

Как написать запрос Lucene, который возвращает все слова, содержащие букву "t"?
(максимум nbr хитов для возврата = 20)

Редактировать: вот что сработало:

RegexQuery regexquery = new RegexQuery (новый термин ("имя поля", ". t. "));
isearcher.search (регулярное выражение, сборщик);
System.out.println ("collector.getTotalHits () =" + collector.getTotalHits ());

Ответы [ 2 ]

6 голосов
/ 01 февраля 2010

Вам нужен другой Анализатор . В примере используется StandardAnalyzer , который удаляет пунктуацию и разбивает слова в соответствии с пробелами и некоторыми другими более сложными правилами. Это, однако, не разбивает слова на символы. Для этого вам, вероятно, потребуется создать свой собственный анализатор, и, похоже, он будет дорогостоящим как во время выполнения, так и в потреблении памяти. Другой (вероятно, лучший) вариант - использовать RegexQuery .

1 голос
/ 01 февраля 2010

У меня хорошие и плохие новости. Хорошей новостью является то, что вы можете использовать подстановочные знаки для соответствия любому тексту:

parser.parse("st*"); // Will math "st.", "station", "steal", etc...

К сожалению, в документации указано:

Примечание: вы не можете использовать * или? условное обозначение в качестве первого символа поиска.

То есть вы не можете использовать этот синтаксис:

parser.parse("*t*");

Таким образом, вы не можете попросить Lucene вернуть термины, содержащие букву «t», в произвольном месте. Вы можете попросить Lucene вернуть условия, которые начинаются с определенной буквы.

Похоже, что в данный момент вы можете перебирать все термины только при условии, что вы соответствуете самому себе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...