Подтвердить что ты не робот

Каков самый простой способ реализации терминов объединения в Solr?

Сочетание разработчиков, похоже, дает хорошие результаты для поиска связанных терминов в текстовых корпусах. В этой теме есть несколько работ, включая известный метод LSA. Самый простой способ объединения ассоциаций - построить матрицу совпадений docs X terms и найти термины, которые встречаются в тех же самых документах чаще всего. В моих предыдущих проектах я реализовал его непосредственно в Lucene по итерации по TermDocs (я получил его, вызвав IndexReader.termDocs(Term)). Но я не вижу ничего подобного в Солре.

Итак, мои потребности:

  • Получить большинство связанных терминов в определенном поле.
  • Чтобы получить термин , ближайший к указанному, в определенном поле.

Я буду оценивать ответы следующим образом:

  • В идеале я хотел бы найти компонент Solr, который напрямую покрывает определенные потребности, то есть что-то, чтобы напрямую получить связанные термины.
  • Если это невозможно, я ищу способ получить информацию о матрице совпадений для указанного поля.
  • Если это тоже не вариант, я хотел бы узнать самый простой способ: 1) получить все условия и 2) получить идентификаторы (числа) документов, в которых эти термины входят.
4b9b3361

Ответ 1

Поскольку ответов на мои вопросы по-прежнему нет, я должен написать свои собственные мысли и принять их. Тем не менее, если кто-то предложит лучшее решение, я с радостью соглашусь с ним вместо моего.

Я пойду с матрицей совпадения, так как это самая главная часть процесса объединения. В общем, Solr предоставляет все необходимые функции для создания такой матрицы в некотором роде, хотя они не так эффективны, как прямой доступ с Lucene. Для построения матрицы нам нужно:

  • Все термины или, по крайней мере, наиболее часто встречающиеся, потому что редкие термины не будут влиять на результат объединения по своей природе.
  • Документы, в которых эти термины встречаются, опять же, по крайней мере, верхние документы.

Обе эти задачи могут быть легко выполнены со стандартными компонентами Solr.

Получить термины TermsComponent или граненый поиск может быть использовано. Мы можем получить только верхние термины (по умолчанию) или все термины (путем установки максимального количества принимаемых условий, см. Документацию о конкретной функции для подробностей).

Получение документов с указанным термином - это просто поиск этого термина. Слабым моментом здесь является то, что нам нужно 1 запрос на каждый срок, и могут быть тысячи условий. Еще один слабый момент заключается в том, что ни простой, ни факсированный поиск не предоставляют информацию о количестве вхождений текущего термина в найденном документе.

При этом легко построить матрицу совпадений. Для моей ассоциации можно использовать другое программное обеспечение, например Weka или написать собственную реализацию, скажем, алгоритм Apriori.

Ответ 2

Вы можете экспортировать индекс Lucene (или Solr) в Mahout, а затем использовать выделение скрытого распределения дирихле. Если LDA недостаточно для LSA для ваших нужд, вы можете просто взять матрицу корреляции от Mahout, а затем использовать Mahout для принятия разложения сингулярных значений.

Я не знаю никаких LSA-компонентов для Solr.

Ответ 3

Вы можете получить количество вхождений текущего термина в найденном документе в следующем запросе:

http://ip:port/solr/someinstance/select?defType=func&fl=termfreq(field,xxx),*&fq={!frange l=1}termfreq(field,xxx)&indent=on&q=termfreq(field,xxx)&sort=termfreq(field,xxx) desc&wt=json