Документы Solr должны соответствовать одному полю

у меня два поля

  1. текстовое поле.. В него копируются все важные поля, такие как категория, название продукта, бренд.

  2. поле атрибутов .. Все атрибуты копируются в это поле.

У меня есть один поисковый запрос, например. "Сверло диаметром 50 мм"

Я хочу найти эту строку в обоих полях. Я предполагаю, что это будет соответствовать всем продуктам, у которых есть детализация в текстовом поле.

Я хочу сузить результат, если какие-либо атрибуты соответствуют диаметру 50 мм.

И если в поле атрибутов нет совпадений, я хочу вернуть все документы, соответствующие текстовому полю.

Изменить: мне не нужны документы, которые не соответствуют текстовому полю.

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

Если не найдено, мы возвращаем все документы, соответствующие текстовому полю.


person Niraj Patel    schedule 30.07.2014    source источник


Ответы (2)


Это становится немного сложнее, и многое зависит от ваших требований к полевой обработке.

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

Минимальное совпадение позволяет вам настроить, сколько терминов в запросе должно быть найдено, чтобы он отображал результаты. Это помогает отсеять документы, которые соответствуют только одному термину в одном поле.

Наконец, если вы действительно хотите иметь здесь свою собственную логику, вы можете добавить к полю +, чтобы сделать его обязательным. Например, +attributes:drill будет возвращать только те элементы, которые содержат детализацию в поле атрибутов.

person nick_v1    schedule 30.07.2014
comment
Пожалуйста, смотрите мой другой комментарий, у меня нет другой проблемы - stackoverflow .com/questions/25051388/ - person Niraj Patel; 31.07.2014
comment
Нет, это не так, я смотрю на ту же проблему, что и lucene.472066.n3.nabble.com/ - person Niraj Patel; 31.07.2014

Будет ли соответствовать «сверло», зависит от того, как обрабатываются ваши поля, но, вероятно, да. Самый простой способ сделать это — не ограничиваться «если не совпадает здесь, сделать это..», а забивать совпадения в поле атрибутов выше. Вы можете сделать это, используя qf (при использовании (e)dismax) вместе с их весами, такими как attributes^20 text, который будет оценивать любое совпадение в атрибутах в 20 раз больше, чем совпадение в тексте. Любые документы, совпадающие при поиске с правильным термином в attributes, будут затем оцениваться выше, чем документы, соответствующие только text.

Вы также можете сделать что-то подобное в параметре q, где вы можете взвесить каждый термин отдельно: text:drill OR attributes:drill^20.

person MatsLindh    schedule 30.07.2014
comment
Таким образом, нам будут возвращены документы, которые не соответствуют текстовому полю из-за ИЛИ - person Niraj Patel; 30.07.2014
comment
Да, как я объяснил; те, которые совпадают по атрибутам, будут оценены выше, чем те, которые совпадают только по тексту. Трудно точно сказать, что вы хотите, но вы также можете использовать bq, если хотите использовать отдельный запрос для повышения документов (позволяя attributes:"50mm diameter" повышать, если есть совпадение в атрибутах). Вам придется расширить свой вопрос с более подробной информацией, если это не то, что вы ищете. - person MatsLindh; 30.07.2014
comment
На самом деле я также смотрю на категорию в результатах поиска. Поэтому я не хочу, чтобы результаты в текстовом поле не совпадали. Я создал 2 поля копирования, в одном я скопировал все поля, упомянутые в текстовом поле ранее, а во втором поле я скопировал все поля в текстовых + атрибутивных полях. И теперь я делаю запрос AND, но получаю следующую проблему stackoverflow.com/questions/25051388/ - person Niraj Patel; 31.07.2014