поиск с подстановочными знаками только для определенных элементов

Я ищу способ выполнять поиск по шаблонам только для определенных элементов при выполнении search:search. В частности, у меня могут быть документы следующего вида:

<pdbe:person-envelope xmlns:pdbe="http://schemas.abbvienet.com/people-db/envelope">
  <person xmlns="http://schemas.abbvienet.com/people-db/model">
    <costcenter>
      <code>0000601775</code>
      <name>DISC-PLAT INFORM</name>
   </costcenter>
    <displayName>Tj Tang</displayName>
    <upi>10025613</upi>
    <firstName>
      <preferred>TJ</preferred>
      <given>Tze-John</given>
   </firstName>
    <lastName>
      <preferred>Tang</preferred>
      <given>Tang</given>
   </lastName>
    <title>Principal Research Scientist</title>
  </person>
  <pdbe:raw/>
</pdbe:person-envelope>

Когда происходит поиск, я хочу, чтобы в тексте поиска автоматически использовались подстановочные знаки, но только для определенных элементов, таких как displayName, firstName, lastName, но НЕ для upi или кода. Насколько я понимаю, у меня были бы включены определенные индексы, связанные с подстановочными знаками, в базе данных, но тогда мне понадобится специальный анализатор запросов, который переписывает запрос в несколько операторов cts:element-query и cts:element-value-query для каждого элемента, который я хочу использовать для поиска с подстановочными знаками, ИЛИ 'd с первоначально проанализированным поисковым запросом. Или я могу создать ограничения поля и переписать запрос, чтобы использовать ограничения поля.

Есть ли другой способ условного поиска с использованием подстановочного знака для некоторых элементов, но не для других, когда пользователь вводит простой поисковый запрос? Т.е. частичные имя и фамилия, «TJ Tan», но без частичных совпадений при поиске «100256».


person TJ Tang    schedule 26.05.2016    source источник


Ответы (1)


Ты на правильном пути. Возьмем элемент (или, возможно, поле) запроса на "TS Tan"

С помощью cts: tokenize вы можете разбить это (прочтите о cs: tokenize - это не просто обычный токенизатор).

Потом у меня есть "TS" и "Tan".

Вы можете делать такие вещи, как применять бизнес-правила к тому, какое слово должно быть с подстановочным знаком, а какое нет, и строить соответствующий запрос cts (возможно, отдельные запросы слов в операторе and - или ближайшем запросе - настройка зависит от ваших потребностей).

Теперь, когда поисковая фраза токенизирована, вы также можете подумать, что построение ваших результатов зависит не от индекса с подстановочными знаками, а от словаря слов элемента - где вы выполняете расширение термина с помощью word-match, и эти термины затем отправляются в запрос.

Иногда мы идем дальше и комбинируем построение запроса с xdmp: оценка и делаем запрос менее строгим, если мы не получаем достаточно результатов на раннем этапе.

Куда девать эту логику? Вы упоминаете search: search, поэтому в этом случае я бы посоветовал вам упаковать это в настраиваемое ограничение.

person David Ennis    schedule 26.05.2016