paintCode: a * часть запроса является префиксным запросом для любого paintCode, начинающегося с «a». Это то, к чему вы стремитесь?
Lucene расширяет префиксные запросы в логический запрос, содержащий все возможные термины, соответствующие префиксу. В вашем случае, очевидно, существует более 1024 возможных paintCode
с, которые начинаются с «а».
Если вам кажется, что префиксные запросы бесполезны, вы недалеки от истины.
Я бы посоветовал вам изменить схему индексирования, чтобы избежать использования префиксного запроса. Я не уверен, что вы пытаетесь выполнить в своем примере, но если вы хотите искать коды рисования по первой букве, создайте поле paintCodeFirstLetter и выполните поиск по этому полю.
ДОБАВЛЕНО
Если вы в отчаянии и готовы принять частичные результаты, вы можете создать свою собственную версию Lucene из исходного кода. Вам необходимо внести изменения в файлы PrefixQuery.java
и MultiTermQuery.java
, оба в org/apache/lucene/search
. В методе rewrite
обоих классов измените строку
query.add(tq, BooleanClause.Occur.SHOULD); // add to query
до
try {
query.add(tq, BooleanClause.Occur.SHOULD); // add to query
} catch (TooManyClauses e) {
break;
}
Я сделал это для своего собственного проекта, и он работает.
Если вам действительно не нравится идея изменить Lucene, вы можете написать свой собственный вариант PrefixQuery и собственный QueryParser, но я не думаю, что он намного лучше.