2017-01-18 2 views
1

У меня создалось впечатление, что когда поисковая фраза находится в двойных кавычках, она будет выполнять точный поиск. Но я тоже получаю частичные матчи (хотя оценка была низкой). Я ожидал, что он должен делать точный матч. Ниже мой пример кода .. я пропускаю что-тоПроблема с поиском грамматики маркетолога

xquery version "1.0-ml"; 
declare namespace html = "http://www.w3.org/1999/xhtml"; 
import module namespace search = "http://marklogic.com/appservices/search" at "/MarkLogic/appservices/search/search.xqy"; 
import module namespace functx = "http://www.functx.com" at "/MarkLogic/functx/functx-1.0-doc-2007-01.xqy"; 

let $q := '(“protein degradation”) AND ((context:PCS)) AND (sort:date_desc)' 

let $options := 
    <options xmlns="http://marklogic.com/appservices/search"> 
    <additional-query> 
     <cts:collection-query xmlns:cts="http://marklogic.com/cts"> 
      <cts:uri>http://XXXXX/type/envelope</cts:uri> 
     </cts:collection-query> 
    </additional-query> 
    <operator name="sort"> 
     <state name="date_desc"> 
      <sort-order type="xs:dateTime" direction="descending"> 
       <field name="upload_date"/> 
      </sort-order> 
     </state> 
     <state name="date_asc"> 
      <sort-order type="xs:dateTime" direction="ascending"> 
       <field name="upload_date"/> 
      </sort-order> 
     </state> 
    </operator> 
    <constraint name="context"> 
     <range type="xs:string" facet="true"> 
      <element name="context" ns="http://XXXXX/metadata"/> 
      <facet-option>frequency-order</facet-option> 
      <facet-option>descending</facet-option> 
     </range> 
    </constraint> 
    <constraint name="type"> 
     <range type="xs:string" facet="true"> 
      <element name="type" ns="http://XXXXX/metadata"/> 
      <facet-option>frequency-order</facet-option> 
      <facet-option>descending</facet-option> 
     </range> 
    </constraint> 
    <term> 
     <term-option>case-insensitive</term-option> 
     <term-option>punctuation-insensitive</term-option> 
     <term-option>whitespace-insensitive</term-option> 
     <term-option>wildcarded</term-option> 
    </term> 
    <search-option>unfiltered</search-option> 
</options> 

let $start := 1 
let $page-length :=1 

let $result := search:search($q, $options, $start, $page-length) 
return $result 

Вот что я .. Я очень смущен .. Я не поэтому следующий результат был как удар

<search:result index="1" uri="/documents/PCS/0ba1e4a0190b77a3962e1218c3c1a7f4cb233ddf.xml" path="fn:doc("/documents/PCS/0ba1e4a0190b77a3962e1218c3c1a7f4cb233ddf.xml")" score="58624" confidence="0.329381" fitness="0.5856407"> 
    <search:snippet> 
    <search:match path="fn:doc("/documents/PCS/0ba1e4a0190b77a3962e1218c3c1a7f4cb233ddf.xml")/*:document-envelope/*:metadata/*:context"> 
     <search:highlight>PCS</search:highlight> 
    </search:match> 
    <search:match path="fn:doc("/documents/PCS/0ba1e4a0190b77a3962e1218c3c1a7f4cb233ddf.xml")/*:document-envelope/*:extractedText/*:html/*:body/*:p[1]"> 
Analysis of the Safety Risks Associated with Hydrazine as a <search:highlight>Degradation</search:highlight> Product in LCIG RD12714 ra-rd12714-hydrazine</search:match> 
    <search:match path="fn:doc("/documents/PCS/0ba1e4a0190b77a3962e1218c3c1a7f4cb233ddf.xml")/*:document-envelope/*:extractedText/*:html/*:body/*:p[9]">...of the Safety Risks Associated with Hydrazine as a <search:highlight>Degradation</search:highlight> Product in...</search:match> 
    </search:snippet> 
</search:result> 

Если мы замечаем в результате выше, это соответствует <search:highlight>Degradation</search:highlight> ... Почему он делает частичные совпадения, когда мы пытаемся выполнить точный поиск?

----- Добавлен поиск: разбор вывода ------

<cts:and-query xmlns:cts="http://marklogic.com/cts" xmlns:search="http://marklogic.com/appservices/search"> 
    <cts:word-query> 
    <cts:text xml:lang="en">“protein</cts:text> 
    <cts:option>case-insensitive</cts:option> 
    <cts:option>punctuation-insensitive</cts:option> 
    <cts:option>whitespace-insensitive</cts:option> 
    <cts:option>wildcarded</cts:option> 
    </cts:word-query> 
    <cts:word-query> 
    <cts:text xml:lang="en">degradation”</cts:text> 
    <cts:option>case-insensitive</cts:option> 
    <cts:option>punctuation-insensitive</cts:option> 
    <cts:option>whitespace-insensitive</cts:option> 
    <cts:option>wildcarded</cts:option> 
    </cts:word-query> 
    <cts:element-range-query operator="="> 
    <cts:element xmlns:_1="http://XXXXX/metadata">_1:context</cts:element> 
    <cts:value xsi:type="xs:string" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">PCS</cts:value> 
    <cts:option>collation=http://marklogic.com/collation/</cts:option> 
    </cts:element-range-query> 
    <cts:annotation operator-ref="sort" state-ref="date_desc"> 
    </cts:annotation> 
</cts:and-query> 
+0

Пожалуйста, поделитесь результатами поиска: проанализируйте свой запрос и параметры. Это отличный способ для отладки строкового поиска. –

+0

Добавлен поиск: parse output – Ravi

ответ

2

Я думаю, что проблема заключается в фантазии цитаты:

import module namespace search = "http://marklogic.com/appservices/search" at "/MarkLogic/appservices/search/search.xqy"; 

search:parse('"protein degradation"') 

дает:

<cts:word-query xmlns:cts="http://marklogic.com/cts"> 
    <cts:text xml:lang="en">protein degradation</cts:text> 
</cts:word-query> 

в то время как:

import module namespace search = "http://marklogic.com/appservices/search" at "/MarkLogic/appservices/search/search.xqy"; 

search:parse('“protein degradation”') 

дает:

<cts:and-query xmlns:cts="http://marklogic.com/cts"> 
    <cts:word-query> 
    <cts:text xml:lang="en">“protein</cts:text> 
    </cts:word-query> 
    <cts:word-query> 
    <cts:text xml:lang="en">degradation”</cts:text> 
    </cts:word-query> 
</cts:and-query> 
+0

Спасибо .. Должен был проверить функцию синтаксического анализа – Ravi

0

Я хотел бы предложить, что вы используете термин-опцион под названием "точный"

Из документов: "Точный" Точный запрос соответствия. Сокращение для «чувствительных к регистру», «чувствительных к диакритике», «чувствительных к пунктуации», «чувствительных к пробелу», «неустойчивых» и «неустановленных».

+0

hmm ... так что вы предлагаете, если есть кавычки, тогда я добавляю « точный Ravi

+0

Я думаю, что термин-вариант применим ко всей строке поиска, а не только к фразе, правильно? Так что это будет работать только для сценариев, где двойные кавычки окружают всю строку поиска. , , –

+0

Да, это то, что я думал ... если только часть строки поиска содержит цитаты, что произойдет? – Ravi

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