Marklogic JSON文档字段索引

时间:2017-03-29 17:14:51

标签: marklogic marklogic-8

我有一个包含所有json文档的ML数据库..我在为这些文档创建字段时遇到问题..说我有一个文档

{
    "id": "1452016",
    "name": "ALEXA488",
    "identifyingInfo": {
        "preparation": {
            "chemicalConjugations": [{
                "name": "ALEXA 488"
            }]
        }
    }
}

我为顶级json元素name创建了一个字段..

{
 "field-name": "concept_name",
 "field-path": [
  {
    "path": "/name",
    "weight": 1
  }
  ],
  "word-lexicon" :["http://marklogic.com/collation/en/S1"]
}

我也在这个字段上创建了一个字段范围索引。

现在当我像这样进行搜索时

xquery version "1.0-ml";
import module namespace search = "http://marklogic.com/appservices/search" at "/MarkLogic/appservices/search/search.xqy";


let $search := ' (concept_name:(*ALEXA*))'

let $options :=
   <options xmlns="http://marklogic.com/appservices/search">
    <constraint name="collection">
        <collection prefix=""/>
    </constraint>
    <constraint name="concept_name">
        <word>
            <field name="concept_name" collation="http://marklogic.com/collation/en/S1"/>
        </word>
    </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>
    <return-facets>false</return-facets>
    <return-values>false</return-values>
    <return-constraints>false</return-constraints>
    <return-frequencies>false</return-frequencies>
    <return-qtext>false</return-qtext>
    <search-option>format-json</search-option>
    <search-option>score-simple</search-option>
</options>

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

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

return $result

搜索匹配顶级nameidentifyingInfo/preparation/chemicalConjugations/name ..

字段路径应该是什么,以便它只匹配顶级json元素,在这种情况下是name

2 个答案:

答案 0 :(得分:0)

你的田径路看起来不错。您可以使用

进行检查
cts:field-value-match("concept_name", "*")

但是你正在尝试使用通配符。您是否在您的字段上启用了“尾随通配符搜索”?你还想要启用“一/二/三字符搜索”吗?

答案 1 :(得分:0)

我让这个工作。用以下内容替换约束:

<constraint name="concept_name">
  <value>
    <field name="concept_name" />
  </value>
</constraint>

在您的字段中,启用字段值搜索跟踪通配符搜索

我在数据库中创建了三个文档;一个就像你的样本,一个只在/ name中有“ALEXA”,另一个在另一个名称中只有“ALEXA”。我的测试正确找到了两个文件。