2014-01-02 5 views
2

Предположим, что я ищу, используя один из API. Я ищу документы, содержащие фразу «John and Jane». В некоторых моих документах есть «John & Jane» (на самом деле Джон & amp; Jane). Я хочу, чтобы они тоже были возвращены. Также рассмотрите обратную ситуацию.Поиск по маркетологу с амперсандом

Marklogic Предоставить любые варианты для этого?

ответ

1

Запросы, выраженные как cts: элементы запроса или XML, легко переписать с помощью выражений XQuery typeswitch. В примере списка обсуждений на http://markmail.org/message/6hxmuqnpnfm73j4n есть пример чего-то подобного.

+0

Я думаю, что это станет трудной задачей переписать запрос для случаев, когда моя строка запроса (например, в cts: element-word-query) «Джон и Джейн, Джозеф и Джордан и т. д ..», и мой документ содержит «Джон и Джейн, Джозеф и Джордан и так далее» .. "или одна и та же фраза с другой комбинацией «&» и «и». Может быть, это глупо с моей стороны, но я надеялся, что механизм, похожий на поиск с использованием стебля, будет на месте, чтобы разрешить это. Я имею в виду, что «работает» разрешается «запускать», и наоборот «&» будет разрешено «и» и наоборот. – callow

+0

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

+0

Спасибо за предложение – callow

1

Майк дает хорошее предложение, но, возможно, стоит сделать шаг назад и сначала рассмотреть вашу проблему. Из вашего комментария к отвечу Майка я понимаю, что вы ищете что-то вроде расширения тезауруса, но вместо «и» и «&» вместо других слов.

Возможно, я ошибаюсь, но, насколько мне известно, MarkLogic не предоставляет функции, чтобы автоматически позаботиться об этом. Такие функции, как search:search и search:parse, являются мощными, но не заходят так далеко. Вы сами можете взять строку поиска, как ваша, разбить ее на части вручную, чтобы обернуть ее в запрос cts: или использовать для этого что-то вроде search:parse, а затем вытащить трюки, подобные Майку, чтобы пройти через ваш запрос - дерева и расширять любой конкретный узел поискового запроса, который вы хотели бы расширить определенным образом.

Отметка, на которую указывает Майк, дает пример того, как пройти дерево запросов и манипулировать им. Немного тяжелый для этого конкретного случая, но есть модуль тезауруса, который может помочь в различных общих случаях. В следующей главе Search Dev Guide объясняет свои особенности, и заканчивается небольшой пример того, как применять его:

http://docs.marklogic.com/guide/search-dev/thesaurus#chapter

HTH!

+0

Спасибо за это. Мне нужно будет понять, что я могу с этим поделать. – callow

1

Предположим, ваш термин для поиска является "John & Jane"

Для поиска выше слова, вы можете использовать следующую строку

let $inputSearchDetails ="John & Jane"

let $InputXML := xdmp:unquote($inputSearchDetails, "", ("format-xml", "repair-full"))

Смежные вопросы