Как использовать API тезауруса MarkLogic для фраз?

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

xquery version "1.0-ml";
import module namespace thsr="http://marklogic.com/xdmp/thesaurus" at "/MarkLogic/thesaurus.xqy";

cts:search(
doc("/Docs/hamlet.xml")//LINE,
thsr:expand(
    cts:word-query("weary"), 
    thsr:lookup("/myThsrDocs/thesaurus.xml", "weary"),
    (), 
    (), 
    () )
)

Вопрос в том, как поддерживать следующие случаи:

  • яблоко и апельсин
  • Яблоко НЕ апельсин
  • яблоко - апельсин
  • яблоко + апельсин
  • форма: 10-К
  • соавтор: Apple
  • Яблочно-оранжевая форма: [10-K]
  • «Яблоко и апельсин»
  • «Яблоко» Апельсин

person user2431731    schedule 05.08.2013    source источник


Ответы (2)


Я не думаю, что расширение тезауруса предназначено для этих случаев.

Вместо этого рассмотрите возможность использования API поиска и расширения грамматики, чтобы включить варианты логических операторов:

http://docs.marklogic.com/guide/search-dev/search-api#id_44520

Чтобы сопоставить form: и co: с одним и тем же индексом, снова рассмотрите возможность использования API поиска и определения нескольких ограничений для одного и того же индекса:

http://docs.marklogic.com/guide/search-dev/search-api#id_95820
person ehennum    schedule 05.08.2013

Используйте search:parse для синтаксического анализа строки запроса, что дает cts:query XML. Затем используйте рекурсивную функцию typeswitch для обхода XML. Используйте расширение тезауруса для терминов cts:word и cts:word.

person mblakele    schedule 05.08.2013