В настоящее время я хочу реализовать SpanQuery с MultiFieldQuery для нечетких фраз, но у меня есть проблемы с ним.
Я пытался использовать MultiFieldQuery с BooleanQuery.Он работает только частично, он может искать нечеткую фразу, но фраза не идет ни в коем случае, например, мой индекс содержит это «Проверить это».Когда я ищу «Проверить», он возвращает хит и показывает это «Проверить это».Это результат, который я хочу.Однако, когда я ищу «Проверить это», он также возвращает хит и показывает это «Проверить это».В этом случае он должен потерпеть неудачу, потому что «out» - это второе слово.
Я также пытался использовать SpanQuery.Выше сценарий не произойдет, если я использую этот метод.Однако я могу искать только одно поле.В то время как я хочу искать с несколькими полями.
private static TopDocs searchInFuzzyPhrase(String textToFind, String textToFind1, IndexSearcher searcher, int slop)
throws Exception {
// Create search query in phrase
Analyzer analyzer = new StandardAnalyzer();
//multifield
MultiFieldQueryParser query = new MultiFieldQueryParser(new String[]
{ "FULL_NAME", "BRAND_NAME", "DISPLAY_NAME", "DISPLAY_NAME_SYNONYM" }, analyzer);
query.setPhraseSlop(slop);
BooleanQuery bQuery = new BooleanQuery.Builder()
.add(query.parse(textToFind + "~"), BooleanClause.Occur.MUST)
.add(query.parse(textToFind1 + "~"), BooleanClause.Occur.MUST)
.build();
//span
SpanQuery[] clauses = new SpanQuery[2];
clauses[0] = new SpanMultiTermQueryWrapper(new FuzzyQuery(new Term("DISPLAY_NAME", textToFind)));
clauses[1] = new SpanMultiTermQueryWrapper(new FuzzyQuery(new Term("DISPLAY_NAME", textToFind1)));
SpanNearQuery sQuery = new SpanNearQuery(clauses, slop, true);
TopDocs hits = searcher.search(bQuery, 1);
return hits;
}
Используя пример ранее.«Проверить это» Когда я выполняю поиск «Проверить это» с помощью MultiField + BooleanQuery, он возвращает хит, однако это не то, что я хочу.
Когда я выполняю поиск "Проверьте их с помощью SpanQuery, он выдаст пропущенное. Это то, что я хочу частично, но это относится только к одному полю. Я пытаюсь применить его ко многим полям