Solr: Как я могу получить все документы, упорядоченные по счету со списком ключевых слов? - PullRequest
0 голосов
/ 27 мая 2011

У меня есть база данных Solr 3.1, содержащая электронные письма с двумя полями:

  • datetime
  • text

Для запроса у меня есть два параметра:

  • сегодняшняя дата
  • массив ключевых слов («важная вещь», «важная тоже», «не так важен, но больше среднего»)

Можно ли создать запрос к

  1. получить ВСЕ документы этого дня И
  2. отсортировать их по релевантности, упорядочив их так, чтобы электронное письмо с наибольшим количествомиз моих ключевых слов (важных вещей) больше всего баллов?

Часть с датой не очень сложна:

fq=datetime[YY-MM-DDT00:00:00.000Z TO YY-MM-DDT23:59:59.999Z]

Я знаю, что вы можете повысить ключевые слова следующим образом:

q=text:"first keyword"^5 OR text:"second one"^2 OR text:"minus scoring"^0.5 OR text:"*"

Но как мне использовать только ключевые слова для сортировки этого списка и получения ВСЕХ записей вместо того, чтобы делать по-настоящемузапросить и получить только несколько записей назад?

Спасибо за помощь!

Ответы [ 3 ]

1 голос
/ 24 октября 2012

Вы можете выполнить первый запрос для:

fq = datetime [YY-MM-DDT00: 00: 00.000Z TO YY-MM-DDT23: 59: 59.999Z]

, чтодает все документы, которые соответствуют диапазону.Затем используйте CachingWrapperFilter для второго запроса, чтобы найти документы в DocSet из первого запроса, которые имеют хотя бы одно ключевое слово.Они будут ранжироваться по релевантности для tf-idf.Вы можете использовать ConstantScoringQuery первым, чтобы получить список соответствующих документов самым быстрым способом.

1 голос
/ 27 мая 2011

Вам необходимо указать свои термины в основном запросе, а затем изменить запрос даты, чтобы он был фильтром запросов к этим результатам, добавив следующее.

fq=datetime[YY-MM-DDT00:00:00.000Z TO YY-MM-DDT23:59:59.999Z]

Таким образом, у вас должно быть что-то вроде этого:1004 *

q=<terms go here>&fq=datetime[YY-MM-DDT00:00:00.000Z TO YY-MM-DDT23:59:59.999Z]

Редактировать: Еще немного о фильтрах запросов (как предложено rfreak ).

Из Solr Wiki - Руководство по FilterQuery - "Теперь, что такое запрос фильтра? Это просто часть запроса, которая выделена для специальной обработки. Это достигаетсяв Solr, указав его с помощью параметра fq (запрос фильтра) вместо параметра q (основной запрос). Тот же результат можно получить, оставив эту часть запроса в основном запросе. Разница будет в эффективности запроса. Это потому, что результатзапроса фильтра кэшируется, а затем используется для фильтрации первичного результата запроса с использованием пересечения множества. "

Они должны быть уже отсортированы по значению релевантности, что является просто поведением Solr по умолчанию.Вы можете увидеть счет, добавив это поле.

fl=*,score

Если вы используете Полный интерфейс для создания запроса на интерфейсе администратора в вашей установке Solr по адресу http://<yourserver:port#>/<instancename>/admin/form.jsp, вы увидите, где вы можете указать фильтрзапрос, поля и другие параметры.Вы можете проверить Solr Wiki для получения более подробной информации о параметрах и их использовании.

Я надеюсь, что это поможет вам.

0 голосов
/ 27 мая 2011

Сортировка по релевантности - это поведение по умолчанию в solr / lucene.

Если ваши результаты не удовлетворены, попробуйте поместить ключевые слова в кавычки

// Редактировать: Свернуть ответ из Paige Cook,используйте что-то подобное

q="important thing"&fq=datetime[YY-MM-DDT00:00:00.000Z TO YY-MM-DDT23:59:59.999Z]

// 2.и обновитьЗадумываясь над этим ответом: цитаты не очень хорошая идея, потому что в этом случае вы будете получать только «важные вещи», но не «важные тоже»

Суть в том, какие ключевые слова вы используете.Потому что: поиск - важная вещь - приводит к наивысшим баллам для писем «важная вещь».Но lucene не знает, как оценить «важно тоже» или «не так важно, но больше среднего» по отношению к вашим ключевым словам.Другая идея - поиск только «важных».Но значения полей «importand thing» и «importand too» дают почти одинаковые значения оценки, поскольку 50% искомых ключевых слов (в этом ключе: «импортированный») являются частью значения поля.Так что, вероятно, вы должны изменить свои ключевые слова.Это могло бы сработать после изменения слова «importend» на «также важное письмо», чтобы получить соотношение зверей «ключевое слово» и значение поля для получения кратчайшего значения Mail-discripton до самого высокого значения.

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