MarkLogi c Частичный поиск и значения формул - PullRequest
0 голосов
/ 17 января 2020

MarLogi c 9.0.8.2

У нас есть xml данные в MarkLogi c

   1.
<group>
    <formula>
        <item>Al</item>
        <role>sur</role>
    </formula>
    <formula>
        <item>As</item>
        <role>sur</role>
    </formula>
    <formula>
        <item>Ga</item>
        <role>sur</role>
    </formula>
</group>

2. 
<group>
    <formula>
        <item>GaAlAs-GaAs</item>
        <role>int</role>
    </formula>
<group>

3.
<group>
    <formula>
        <item>AlGaAs</item>
        <role>ss</role>
    </formula>
<group>
4.
<group>
    <formula>
        <item>GaNAs</item>
        <role>ss</role>
    </formula>
<group>

Теперь, если пользователь ищет "(Ga AND As)" только 2-й и 3-й xml должны быть извлечены, поскольку они содержатся в одном и том же элементе

Если пользователь ищет "Ga AND As", все записи

Так что просто интересно, как написать xQuery для так же, как в 1-м случае, он будет содержать все поисковые слова, а во 2-м случае он будет содержать данное слово.

Что будет наилучшим подходом для поисковых запросов такого типа

1 Ответ

2 голосов
/ 17 января 2020

Вы можете получить поведение, которое вы ищете, если вы можете повлиять на конечных пользователей, чтобы написать item:(Ga AND As) вместо этого. Если это так, используйте контейнерное ограничение с именем item для элемента item. Примерно так:

xquery version "1.0-ml";

import module namespace search = "http://marklogic.com/appservices/search"
  at "/MarkLogic/appservices/search/search.xqy";

search:search(
  "item:(Ga AND As)",
  <options xmlns="http://marklogic.com/appservices/search">
    <constraint name="item">
      <container>
        <element ns="" name="item"/>
      </container>
    </constraint>
    <debug>true</debug>
  </options>
)

Чтобы сопоставить такие вещи, как AlGaAs, вам, вероятно, нужно расширить запрос для поиска комбинаций терминов и смешать некоторые подстановочные знаки. Это будет соответствовать шаблонам, таким как *Ga* и *As. Обратите внимание, что вам придется включить опции индекса с подстановочными знаками, чтобы это работало.

HTH!

...