позиции слова элемента - концептуальные вопросы - PullRequest
0 голосов
/ 27 декабря 2018

Я пытаюсь понять влияние настройки индекса element word positions.Смотрите следующий xquery, который возвращает план простого element-word-query поиска:

xdmp:plan(cts:search(doc(), 
  cts:and-query(
    cts:element-word-query(xs:QName("name"), "element word position")
  ),
  ("unfiltered")
))

и final-plan, если индекс не активирован (сокращенная форма для экономии места):

<qry:and-query>
    <qry:term-query>element(name),pair(word("element"),word("word"))</qry:term-query>
    <qry:term-query>element(name),pair(word("word"),word("position"))</qry:term-query>
    <qry:term-query>word("element")</qry:term-query>
    <qry:term-query>word("word")</qry:term-query>
    <qry:term-query>word("position")</qry:term-query>
</qry:and-query>

План запроса после того, как индекс активирован (word-positions, а также element word positions):

<qry:and-query>
    <qry:term-query>element(name),pair(word("element"),word("word"))</qry:term-query>
    <qry:term-query>element(name),pair(word("word"),word("position"))</qry:term-query>
    <qry:element-query>
        element(name)
        <qry:word-query>
            <qry:KP pos="0">word("element")</qry:KP>
            <qry:KP pos="1">word("word")</qry:KP>
            <qry:KP pos="2">word("position")</qry:KP>
        </qry:word-query>
    </qry:element-query>
</qry:and-query>

Итак, я предполагаю, потому что генерируется намного меньше term-query, итоговый идентификатор фрагмента кандидатаколичество будет меньше, и, следовательно, пересечение при разрешении индекса будет быстрее.Кроме этого мне бы очень хотелось понять, как работает element-query под капотом.Итак, у меня есть несколько вопросов:

  • Какая дополнительная информация сохраняется в индексе, если активирована element word positions?
  • Как будет выглядеть индекс и список публикаций?Является ли ключ только элементом или комбинацией элемент + слово?Есть ли графические ресурсы, которые это визуализируют?(не жду, что вы что-то нарисуете)
  • Кроме того, как выполняется element-query?Я вижу, как простой term-query возвращает список сообщений термина «ключ», но я не уверен, как оценивается element-query с word-query в качестве «подзапроса».

Редактировать: добавлена ​​картинка, чтобы визуализировать мое понимание того, как индекс может выглядеть при включенных позициях слов элементов.(Подробности см. В комментариях mholstege) enter image description here

1 Ответ

0 голосов
/ 28 декабря 2018

Когда вы включаете позиции, мы сохраняем вектор позиций для каждого документа в индексе для соответствующего термина, а не просто идентификатор документа.

Способ обдумать это с точки зрения специфики конечных запросов и работы, связанной с их вычислением и пересечением промежуточных результатов.

Когда вы видите запрос-термин в запросеplan, это означает, что он просто просматривает идентификаторы документов, поэтому нет сведений об относительном позиционировании - менее точный результат для длинной фразы, подобной этой, потому что «слово элемента» и «позиция слова» могут встречаться в двух отдельныхродительские элементы в документе.Если ваши данные содержат только один элемент с этим именем в каждом документе, это не может произойти, хотя у вас все еще могут быть ложные совпадения, когда подфразы из двух слов встречаются, скажем, в обратном порядке или разделены другими словами.

Когда вы видите запрос слова в плане запроса, это означает, что мы будем смотреть на позиции, и здесь вы видите относительные позиции для каждого из слов в фразе.Когда это решено, мы исследуем вектор позиций и отбрасываем те, которые не означают это позиционное ограничение.Таким образом, все совпадения будут иметь следующую последовательность слов в следующем порядке: более точное совпадение.

Элемент-запрос в плане также применяет позиционные ограничения экземпляров элемента относительно совпадений внутри элемента.Существуют оптимизации, в которых позиционные ограничения элементов фактически выталкиваются вниз к листьям дерева запросов, чтобы избежать лишних промежуточных вычислений.

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

...