Использование нескольких полей с ComplexPhraseQueryParser в Lucene - PullRequest
1 голос
/ 10 января 2012

В настоящее время я использую MultiFieldQueryParser от Lucene для поиска одного и того же запроса по нескольким полям (т. Е. Поиск по значению дает field1:value field2:value field3:value). Однако при этом используется стандарт QueryParser , который не поддерживает поиск по подстановочным знакам внутри фраз (т. Е. «Тестовая фраза *»). Поэтому я пытаюсь использовать ComplexPhraseQueryPhrase из пакета contrib / misc, который поддерживает это. Тем не менее, это позволяет вам искать только одно поле за раз, очень похоже на QueryParser.

Итак, я пытался объединить их, создав MultiFieldComplexPhraseQueryParser, но пока не добился успеха. Кто-нибудь сделал что-то подобное или есть предложения о том, как это сделать? Спасибо!

1 Ответ

0 голосов
/ 13 января 2012

Я был действительно успешен с самого начала с MultiFieldQueryParser (Lucene 3.0.3):

public class MultiFieldQueryParserTests {
    @Test
    public void testMultiFieldQueryParser() throws Exception {
        MultiFieldQueryParser parser = new MultiFieldQueryParser(Version.LUCENE_30, 
                                                                        new String[] { "field1", "field2", "field3" },
                                                                        new WhitespaceAnalyzer());
        Query q = parser.parse("test phrase*");
        System.out.println("query " + q);
        q = parser.parse("\"test phrase*\"");
        System.out.println("query " + q);
    }
}

Что приводит к:

query (field1:test field2:test field3:test) (field1:phrase* field2:phrase* field3:phrase*)
query field1:"test phrase*" field2:"test phrase*" field3:"test phrase*"

Или я что-то здесь упустил?

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