У меня есть вопрос относительно выполнения запроса lucene, включающего перестановку.
Скажем, у меня есть два поля: "имя" и "ключевое слово", и пользователь ищет "joes pizza restaurant". Я хочу, чтобы какая-то часть этого поиска соответствовала полному содержанию поля «имя», а какая-то часть соответствовала полному содержанию поля ключевого слова. Он должен соответствовать всем предоставленным терминам и должен соответствовать всему содержимому полей. Например, это может соответствовать:
1) название: "joes restaurant" ключевое слово: "пицца"
2) название: "joes pizza" ключевое слово: "restaurant"
3) название: "пиццерия" ключевое слово: "joes"
4) название: "пицца" ключевое слово: "ресторан джос"
5) название: "pizza joes" ключевое слово: "restaurant"
но это не будет соответствовать
6) name: "big joes restaurant" ключевое слово: "пицца" - потому что это не совпадение на полном поле
7) name: "joes pizza restaurant" ключевое слово: "nomatch" - потому что хотя бы одно из терминов должно соответствовать полю ключевого слова
Я подумал о возможных способах реализации этого путем вычисления всех перестановок полей и использования логических запросов, однако это не очень хорошо масштабируется, так как число терминов увеличивается. У кого-нибудь есть какие-либо подсказки, как эффективно реализовать такой запрос?