Как настроить стандартный анализатор Lucene для поиска PhraseQuery? - PullRequest
4 голосов
/ 18 апреля 2011

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

IndexWriter writer = new IndexWriter(indexPath, new StandardAnalyzer(Version.LUCENE_CURRENT), true, IndexWriter.MaxFieldLength.LIMITED);

Document doc = new Document();
Field title = new Field("title", titlefield, Field.Store.YES, Field.Index.ANALYZED);
doc.add(title);
writer.addDocument(doc);
writer.optimize();
writer.close();

IndexReader ireader = IndexReader.open(indexPath);
IndexSearcher indexsearcher = new IndexSearcher(ireader);

Term term1 = new Term("title", "one");
Term term2 = new Term("title", "two");
PhraseQuery query = new PhraseQuery();
query.add(term1);
query.add(term2);
query.setSlop(2);

, Lucene должен вернуть все запросы для поля заголовка, содержащего "one" и "два "в пределах 2 слов друг от друга.Но я не получаю никаких результатов, потому что я не использую StandardAnalyzer для поиска.Как можно искать близость в Lucene тогда?Разрешает ли следующий queryParser поиск по близости (используя тильду?)

QueryParser queryParser = new QueryParser("title",new StandardAnalyzer());
Query query = queryParser.parse("test");

1 Ответ

3 голосов
/ 18 апреля 2011

да, когда вы анализируете запрос с помощью QueryParser, вы сможете выполнять поиск по близости.

Как правило, для индексирования и поиска всегда рекомендуется использовать один и тот же анализатор.

BR

Chris

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