Найдите запись тезауруса, передав значение синонима. - PullRequest
1 голос
/ 25 июня 2019

Я использую функцию тезауруса MarkLogic и пытаюсь извлечь запись из тезауруса при передаче одного из синонимов в thsr.lookup().

Например: у меня есть запись thesuarus в базе данных как

<entry xmlns="http://marklogic.com/xdmp/thesaurus">
 <term>Car</term>
 <part-of-speech>noun</part-of-speech>
 <synonym>
  <term>Ford</term>
  <part-of-speech>noun</part-of-speech>
 </synonym>
 <synonym>
  <term>automobile</term>
  <part-of-speech>noun</part-of-speech>
 </synonym>
 <synonym>
  <term>Fiat</term>
  <part-of-speech>noun</part-of-speech>
 </synonym>

Теперь, когда я выполняю функцию как:

thsr.lookup('/thesaurusDoc.xml', 'Car')

Я вернул вышеуказанный элемент ввода, как и ожидалось.

Но когда я пытаюсь искать через синоним, произнесите:

thsr.lookup('/thesaurusDoc.xml', 'Fiat')

Это ничего не возвращает.

Подскажите, пожалуйста, что я здесь не так делаю? предложить какую-либо альтернативу, если функциональность тезауруса не поддерживает поиск через синоним?

Примечание. Я использую функции Javascript на стороне сервера Marklogic, версия ML - 9.0-8.1

.

Я ожидаю получить элемент entry в результате.

Ответы [ 2 ]

0 голосов
/ 27 июня 2019

Вам нужен обратный поиск, но он никогда не был реализован. Тем не менее, нетрудно самостоятельно просмотреть тезаурус. Для точных совпадений вы можете сделать что-то вроде этого:

doc("/thesaurusDoc.xml")
  /thsr:thesaurus/thsr:entry
    [thsr:synonym/thsr:term eq "Fiat"]

или если вы хотите использовать запрос:

doc("/thesaurusDoc.xml")
  /thsr:thesaurus/thsr:entry
    [cts:contains(thsr:synonym/thsr:term, cts:word-query("Fiat"))]

НТН!

0 голосов
/ 27 июня 2019

Подходит ли следующий поиск к выполнению требования?

thsr.queryLookup('/thesaurusDoc.xml', cts.wordQuery('Fiat'))

См. Также https://docs.marklogic.com/thsr.queryLookup

Надеясь, что помогает,

...