#solr
#solr
Вопрос:
Мы пытаемся реализовать очень интересную логику поиска с пользовательским повышением, и мне интересно, может ли Solr это поддерживать. В нашем индексе есть следующие поля:
- Имя
- Описание
- Ключевые слова (массив)
Каждое ключевое слово будет иметь значение amount(int value), связанное с ним.
Поиск выполняется по полю Name, description и keywords. Если ключевое слово соответствует тексту поиска, соответствующий индекс должен быть увеличен только на основе количества совпадающего ключевого слова.
Я прочитал Solr DisMax, и они могут увеличить поле только с использованием фиксированной суммы.
Мой сценарий будет заключаться в том, чтобы увеличить результат на величину X только на основе совпадающих ключевых слов.
Заранее спасибо
Комментарии:
1. Запросы функции: wiki.apache.org/solr/FunctionQuery добейтесь части того, что вы пытаетесь сделать. Проблема в том, что вы хотите, чтобы повышение было установлено в соответствии с соответствующей частью поля, а не с полем. Настолько ли велика разница в ключевых словах? Если это так
2. Ключевые слова будут отличаться, поскольку это будет значение, заданное пользователем. Мне интересно, как мы можем сохранить ключевое слово с их соответствующим количеством в индексе, поскольку я не вижу, чтобы Solr поддерживал 2-мерные массивы из того, что я прочитал до сих пор. Спасибо за ваш ответ @omu_negru
Ответ №1:
Единственное жизнеспособное решение, которое я вижу в этой проблеме (при условии, конечно, что вы ЗАРАНЕЕ НЕ знаете количество ключевых слов), — это просто выполнить запрос в качестве запроса фильтра (чтобы пропустить этап подсчета очков), сопоставить все документы (немного проблематично), а затем просто отсортировать их на своей стороне, используясоответствующий термин для построения компаратора java.
Проблемы могут возникнуть, когда вы получаете особенно большое количество документов, но вы, вероятно, могли бы обойти эту проблему путем разбивки на страницы
Комментарии:
1. Ваш ответ заставил меня задуматься о динамическом построении моего запроса на повышение, выполнив начальный запрос для явного извлечения ключевых слов, которые соответствовали бы тексту моего запроса. Основываясь на моем первоначальном результате запроса, я могу перебирать ключевые слова для построения моего запроса повышения, такого как «bq=ключевое слово: matchkeyword1 ^ amt1 bq=ключевое слово:matchkeyword2 ^ amt2 …»
2. Похоже, что несколько значений bq еще не поддерживаются ссылка
Ответ №2:
Если у вас не слишком много разных сумм, возможно, вы можете попробовать это во время индексации:
Храните «ключевые слова» в разных полях ( dynamicfields->boost-*
) в зависимости от их количества:
boost-1 = keyword1,keyword4,keyword6 <br/>
boost-10 = keyword2<br/>
boost-100 = keyword5
Вы можете выполнить поиск по всем вашим полям повышения (edismax), увеличить каждое динамическое поле на его количество в вашем (e)dismax conf(boost-1^1,boost-10^10,boost-100^100)
.
Комментарии:
1. поскольку это сгенерированные пользователем ключевые слова, я сомневаюсь, что есть конечный набор для выбора
2. @Roy спасибо за ваш ответ, динамическое поле, основанное на сумме, звучит как победитель, но если только у нас есть конечный набор