2014-12-04 4 views
0

Я использую следующий запрос для извлечения записей, но он извлекает ложноположительные результаты.Запрос, возвращающий ложно положительный

<cts:and-query xmlns:cts="http://marklogic.com/cts"> 
    <cts:or-query> 
     <cts:element-value-query> 
     <cts:element>type</cts:element> 
     <cts:text xml:lang="en">article</cts:text> 
     </cts:element-value-query> 
    </cts:or-query> 
    <cts:element-query> 
     <cts:element>body</cts:element> 
     <cts:word-query> 
     <cts:text xml:lang="en">ace???</cts:text> 
     <cts:option>case-insensitive</cts:option> 
     <cts:option>diacritic-insensitive</cts:option> 
     <cts:option>punctuation-insensitive</cts:option> 
     <cts:option>whitespace-insensitive</cts:option> 
     <cts:option>stemmed</cts:option> 
     <cts:option>wildcarded</cts:option> 
     </cts:word-query> 
    </cts:element-query> 
    <cts:or-query> 
     <cts:element-range-query operator="&gt;="> 
     <cts:element>expires-on</cts:element> 
     <cts:value xsi:type="xs:dateTime" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">2014-12-04T06:05:29.78Z</cts:value> 
     </cts:element-range-query> 
     <cts:not-query> 
    <cts:element-value-query> 
     <cts:element>expires-on</cts:element> 
     <cts:text xml:lang="en">*</cts:text> 
     <cts:option>wildcarded</cts:option> 
    </cts:element-value-query> 
     </cts:not-query> 
    </cts:or-query> 
    </cts:and-query> 
</results> 

Этого запрос является безразличным запросом и должен искать 6 букв слова, начинающееся с «аса». Но мы также получаем результаты, содержащие более 6 буквенных слов, начиная с «туза».

Ниже приведен индексы, которые мы используем

  1. слова поиска
  2. позиции слов
  3. быстро Поиск по фразе
  4. быстрого случая чувствительных поиски
  5. быстро диакритических чувствительных поиски
  6. быстрого элемент слова поиск
  7. элемент wo й позиция
  8. быстрого элемент фразы поиск
  9. три символ ищет
  10. быстрых элемент символов поиск
  11. отставая подстановочный поиск
  12. быстрого элемент заднего подстановочного поиска

Кроме того, мы с помощью «нефильтрованных» во время выполнения поиска.

Любая помощь будет оценена по достоинству.

Благодаря

ответ

1

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

Посмотрите на https://docs.marklogic.com/guide/search-dev/wildcard, чтобы понять, как работают различные индексы символов и какие из них вы хотите включить. В этом случае я бы предложил trailing-wildcard, возможно, вместе с element-trailing-wildcard.

Этот запрос также может быть улучшен с помощью некоторых стратегий оптимизации. Я бы избегал этого element-value-query с *, если это возможно. Вместо этого используйте cts:element-query($qname, cts:and-query(())). То, что делает ту же работу, и это намного эффективнее.

Если body простой элемент, это было бы более эффективно использовать для element-word-query вместо комбинирования element-query с word-query. Если body является сложным, то есть, если текст, который нужно сопоставить, находится в элементах потомков, то у вас есть выбор между использованием элемента-запроса с включенным индексом конечных подстановочных знаков или настройкой element word query through для всех элементов-потомков.

+0

Я обновил детали. Пожалуйста, смотрите. –

+0

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

+0

По вашему предложению мы сменили запрос на следующий запрос: cts: element-word-query (xs: QName ("body"), ("ace ??"), ("без учета регистра", " «lac = en»), 1) Запрос не получает никаких результатов, хотя у меня много слов, которые соответствует запросу. –

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