Использование многозначного поля в функции карты - PullRequest
0 голосов
/ 08 сентября 2011

Я работаю над реализацией Solr в проекте, и сейчас я застрял в конкретном поиске, включая поле arr.Дело в том, что:

Я хотел бы найти под-идентификаторы объекта, эти под-идентификаторы хранятся в многозначном поле, например:

<arr name="SubIds">
   <int>12272</int>
   <int>12304</int>
   <int>12306</int>
</arr>

Запрос (или частьзапроса), который я хочу использовать, выглядит следующим образом: map (SubIds, i, i, 1,0)

Когда я, например, заполняю 12304 в поле 'i' в функции карты выше, Я ожидаю, что моя функция вернет 1. Если я введу 12345, она должна вернуть 0. Дело в том, что когда я запускаю этот запрос, он возвращает 0, или «В этом поле нет номера 12304, я возвращаю 0».

При удалении 0 из моей функции карты я вижу фактическое значение, возвращаемое мне (когда 12304 возвращает 1, когда другое возвращаемое значение), в данном случае это 12306!Я пробовал это с несколькими разными многозначными полями, но результат тот же;похоже, что функция проверяет последнее значение в многозначном поле по моему заполненному идентификатору.

Это правда?И когда это произойдет, есть ли способ просмотреть весь arr и вернуть 0 только тогда, когда значение не существует во всем многозначном поле?

** Редактировать: это просто догадка,но может быть так, что функция map () автоматически упорядочивает список arr, когда видит, что все элементы имеют тип int (например).Это может означать, что карта возвращает первое число (наибольшее), которое (в моем примере) будет 12306, а не 12304 ... *

Спасибо!

1 Ответ

1 голос
/ 09 сентября 2011

... Похоже, что функциональные запросы не работают с многозначными полями ...

http://lucene.472066.n3.nabble.com/Using-multivalued-field-in-map-function-td3318843.html#a3322023:

Запросы функций не работают с многозначным полем. http://wiki.apache.org/solr/FunctionQuery#Vector_Functions

Учитывая следующий случай, есть ли кто-нибудь, кто лучше знает, как я могу запрашивать требуемые данные?

У меня есть сайт, полный блогов, и у каждого поста есть свой владелец, этот владелец упоминается через его / ее идентификатор. Например: BloggerId = 123. Также возможно, что в блоге есть несколько соавторов, которые там также упоминается BloggerId, но эти идентификаторы хранятся в многозначное поле в моем предыдущем примере SubIds.

При поиске конкретного блоггера каждый ищет BloggerId. На результаты поиска влияет множество переменных, страна / штат / более конкретные геологические данные, категория блога и т. д. Для этого я использую граненый запрос. Далее я хочу сделать некоторые результаты более важно, в зависимости от BloggerId, я пытался сделать это с следующий запрос:

? Д = {!} Функ карта (сумма (карта (BloggerId, 12304,12304,2,0), карта (BloggerId, 12304,12304,1,0)), 3,3,2) и фл = * , оценка и facet.field = Country & f.Country.facet.limit = 6 & facet.field = Государство & FQ = (BlogCategory: интернет% 20OR% 20BlogCategory: спорт и сортировать = оценка% 20desc, Top% 20desc,% 20SortPriority% 20asc и начать = 0 & omitHeader = истина

В полученном списке должны быть включены блоги, написанные BloggerId 12304. верхняя часть списка, за которой следуют блоги, где BloggerId 12304 соавтор. После этого все остальные блоги, которые соответствуют критериям, но не написаны (или в соавторстве) BloggerId 12304.

Возможно, я мог бы сделать это многозначное поле строковым полем (где идентификаторы разделены символом ";") и запросить мое значение, но если у вас есть идея получше, всегда приветствуем!

В конце я решил добавить строковое поле с пробелами для разделения различных значений. После этого я использовал класс solr.WhitespaceTokenizerFactory для быстрого сканирования строки на наличие вхождений определенного идентификатора.

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