Поисковый запрос Endeca по нескольким полям

Как создать запрос Endeca для комбинации нескольких полей [точно так же, как предложение where в запросе sql]. Предположим, у нас есть три проиндексированных поля:

  1. empId
  2. empName
  3. empGender

Теперь мне нужен запрос типа "где empName как 's%' AND empGender=male"

Спасибо.


person Saurabh    schedule 27.11.2013    source источник


Ответы (2)


Во-первых,

Оформить заказ Record Filters в Расширенном руководстве по разработке.

Если вы пытаетесь использовать Record Filter для свойства, вам нужно будет явно включить его в Developer Studio для этого свойства, в то время как ваши Измерения автоматически смогут применять Record Filter. Это поможет, когда у вас есть явные значения для фильтрации, например empGender.

Тогда ваш Record Filter может выглядеть следующим образом:

Nr=AND(empGender:male)

Вы также можете использовать параметр Ntk, чтобы указать поля для поиска, поэтому, если ваше поле empName включено для поиска по подстановочным знакам (настройте это в Developer Studio), поиск в этом поле будет выглядеть следующим образом:

Ntk=empName&Ntt=s*

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

Nr=AND(empGender:male)&Ntk=empName&Ntt=s*

Чтобы сделать еще один шаг вперед, вы можете указать Search Filters (т.е. Ntk + Ntt параметры) вместе. Я не пробовал это для подстановочных знаков, поэтому вам нужно будет подтвердить это самостоятельно, но для объединения Search Filters вы разделяете их с |

Ntk=empName|empId&Ntt=s*|1234*

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

person radimpe    schedule 28.11.2013
comment
Спасибо. Это работает. На самом деле у нас есть форма поиска с 20 полями, и пользователь может искать по многим комбинациям (например, диапазон данных и статус emp). Для этого я готовлю класс обслуживания, который будет генерировать динамический запрос на основе выбора пользователя. - person Saurabh; 28.11.2013
comment
Кроме того, я не смог найти способ выполнить следующий запрос - где empId в ('1', '2', '3'). Есть идеи? - person Saurabh; 28.11.2013
comment
Нашел способ, но он не работает с другой комбинацией - &Ntk=empId&Ntt=1+2+3&Ntx=mode+matchany (РАБОТАЕТ); &Ntk=empStatus|empId&Ntt=0|1+2+3&Ntx=mode+matchany (НЕ РАБОТАЕТ) - person Saurabh; 28.11.2013
comment
Технически это другой вопрос. Вам нужно использовать Record Filter (Nr), а не Search Filter. Таким образом, ваш запрос должен выглядеть примерно так: Nr=OR(empId:1,empId:2,empId:3). Предполагая, что вы включили Record Filters для свойства empId (или это измерение) - person radimpe; 29.11.2013

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

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

В целом, однако, я думаю, что для такого приложения вы должны отказаться от одновременного поиска по конкретным отдельным полям и использовать возможности фасетирования измерений, чтобы направлять пользователя. Кроме того, окно поиска, которое одновременно выполняет поиск по многим полям в порядке важности, — это действительно путь к упрощенному пользовательскому интерфейсу для такого рода приложений.

person matgeech    schedule 06.12.2013
comment
Вы правы, хотя предоставленное решение отвечает конкретному варианту использования. Когда дело доходит до данных, изложенных в исходном вопросе, вероятность использования исправления орфографии, поиска корней или любых других функций, предоставляемых Endeca, весьма ограничена. В сочетании с тем фактом, что ни одна из этих функций не может использоваться с запросом с подстановочными знаками, фильтры — лучший способ приблизиться к этому, если вам нужно использовать Endeca. Например, поиск чего-то вроде детали или номера сотрудника обычно представляет собой запрос типа «начинается с», поэтому вам уже приходится использовать подстановочные знаки. Спасибо за вклад, хотя. - person radimpe; 08.12.2013