Xquery MarkLogic搜索API是否支持cts:或查询的逗号

Xquery MarkLogic搜索API是否支持cts:或查询的逗号,xquery,marklogic,marklogic-8,Xquery,Marklogic,Marklogic 8,我使用的是Marklogic8,我们的查询如下: <options xmlns="http://marklogic.com/appservices/search"> <grammar> <quotation>"</quotation> <implicit> <cts:and-query strength="20" xmlns:cts="http://marklogic.com/cts"/>

我使用的是Marklogic8,我们的查询如下:

<options xmlns="http://marklogic.com/appservices/search">
  <grammar>
    <quotation>"</quotation>
    <implicit>
      <cts:and-query strength="20" xmlns:cts="http://marklogic.com/cts"/>
    </implicit>
    <starter strength="30" apply="grouping" delimiter=")">(</starter>
    <starter strength="40" apply="prefix" element="cts:not-query" tokenize="word">NOT</starter>
    <joiner strength="10" apply="infix" element="cts:or-query" tokenize="word">OR</joiner>
    <joiner strength="20" apply="infix" element="cts:and-query" tokenize="word">AND</joiner>
    <joiner strength="10" apply="infix" element="cts:or-query">,</joiner>
    <joiner strength="50" apply="constraint">:</joiner>
  </grammar>
  <constraint name="Color"><value><element name="Color" ns="" /></value></constraint>
  <constraint name="Size"><value><element name="Size" ns="" /></value></constraint>
</options>
query=颜色:红、黄、黑,尺寸:中

搜索选项如下:

<options xmlns="http://marklogic.com/appservices/search">
  <grammar>
    <quotation>"</quotation>
    <implicit>
      <cts:and-query strength="20" xmlns:cts="http://marklogic.com/cts"/>
    </implicit>
    <starter strength="30" apply="grouping" delimiter=")">(</starter>
    <starter strength="40" apply="prefix" element="cts:not-query" tokenize="word">NOT</starter>
    <joiner strength="10" apply="infix" element="cts:or-query" tokenize="word">OR</joiner>
    <joiner strength="20" apply="infix" element="cts:and-query" tokenize="word">AND</joiner>
    <joiner strength="10" apply="infix" element="cts:or-query">,</joiner>
    <joiner strength="50" apply="constraint">:</joiner>
  </grammar>
  <constraint name="Color"><value><element name="Color" ns="" /></value></constraint>
  <constraint name="Size"><value><element name="Size" ns="" /></value></constraint>
</options>
但是,它无法将查询解析为正确的方式:

<cts:or-query xmlns:cts="http://marklogic.com/cts">
  <cts:element-value-query>
    <cts:element>Color</cts:element>
    <cts:text xml:lang="en">red</cts:text>
  </cts:element-value-query>
  <cts:word-query>
    <cts:text xml:lang="en">yellow</cts:text>
  </cts:word-query>
  <cts:word-query>
    <cts:text xml:lang="en">black</cts:text>
  </cts:word-query>
  <cts:element-value-query>
    <cts:element>Size</cts:element>
    <cts:text xml:lang="en">middle</cts:text>
  </cts:element-value-query>
</cts:or-query>

颜色
红色
黄色的
黑色
大小
中间的
我知道我们可以使用如下输入查询:

<options xmlns="http://marklogic.com/appservices/search">
  <grammar>
    <quotation>"</quotation>
    <implicit>
      <cts:and-query strength="20" xmlns:cts="http://marklogic.com/cts"/>
    </implicit>
    <starter strength="30" apply="grouping" delimiter=")">(</starter>
    <starter strength="40" apply="prefix" element="cts:not-query" tokenize="word">NOT</starter>
    <joiner strength="10" apply="infix" element="cts:or-query" tokenize="word">OR</joiner>
    <joiner strength="20" apply="infix" element="cts:and-query" tokenize="word">AND</joiner>
    <joiner strength="10" apply="infix" element="cts:or-query">,</joiner>
    <joiner strength="50" apply="constraint">:</joiner>
  </grammar>
  <constraint name="Color"><value><element name="Color" ns="" /></value></constraint>
  <constraint name="Size"><value><element name="Size" ns="" /></value></constraint>
</options>
query=Color:red或Color:yellow或Color:black和Size:middle

但是太长了


有没有可能缩短我们的输入查询?

markLogic Search API不会这样做。但是,您可以在搜索API上编写一个小的自定义搜索约束,以完成您正在尝试执行的操作。传递了两个参数-分号左侧和右侧的信息。然后,您可以创建适当的查询以根据需要进行匹配。您也可以通过扩展搜索库来实现这一点


但是,在将查询传递给服务器之前,您可能还可以在逻辑中处理它。

这可能值得研究。您必须自己将选项转换为绑定(不太困难),但您将获得一个更高级、更快的搜索字符串解析器。它允许其他表达方式,如:

Color = (yellow red black) AND Size:middle
另见: