2017-07-18 71 views
1

我是MarkLogic的新手。我正在寻找一种方法,只在使用jsearch时从文档中输出匹配元素,但执行查询时,元素与搜索到的词语之间的匹配是未知的。让我来举例说明:Marklogic搜索:仅使用jsearch输出匹配元素和文档的uri

jsearch.documents() 
    .where(cts.wordQuery('mark')) 
    .result(); 

这给了我包含'mark'的所有文档,例如

{ 
    "results": [ 
    { 
    "index": 0, 
    "uri": "/books/twain4.json", 
    "score": 14336, 
    "confidence": 0.432453483343124, 
    "fitness": 0.7490314245224, 
    "document": { 
     "title": "Adventures of Huckleberry Finn", 
     "author": "Mark Twain", 
     "edition": { 
     "format": "hardback", 
     "price": 18 
     } 
     , 
     "synopsis": "The adventures of Huck, a boy of 13, and Jim, an escaped slave, rafting down the Mississippi River in pre-Civil War America." 
    } 
    } 
    , ... 

不过,我想知道,这样它给地方找到一个匹配的每个文档只有匹配的元素(S)我如何调整查询:

{ 
    "results": [ 
    { 
    "index": 0, 
    "uri": "/books/twain4.json", 
    "score": 14336, 
    "confidence": 0.432453483343124, 
    "fitness": 0.7490314245224, 
    "document": { 
     "author": "Mark Twain", 
    } 
    } 
    , ... 

只有作者元素在这里有匹配,但是在执行查询时这个元素是未知的。我只想显示上面作者的匹配值。 在此先感谢!

回答

3

您在这里有几个选项。

如果你想运行使用jSearch只针对一个JSON属性进行搜索,您可以运行以下命令:

const jsearch = require('/MarkLogic/jsearch'); 
const term = 'mark'; 
const query = cts.jsonPropertyWordQuery('author', term); 
jsearch.documentSelect(cts.search(query), { snippet: { query: query } }); 

如果你想控制怎么样得到由jSearch回来了,你可以适用extraction

const jsearch = require('/MarkLogic/jsearch'); 
const term = 'mark'; 
jsearch.documents().where(cts.wordQuery(term)) 
.map({ extract: { paths: ['/author'] }}) 
.result(); 

您也可以将二者结合起来:

const jsearch = require('/MarkLogic/jsearch'); 
const term = 'mark'; 
const query = cts.jsonPropertyWordQuery('author', term); 
jsearch.documentSelect(cts.search(query), { snippet: { query: query }, extract: { paths: ['/author'] } }); 

有关更多信息,您可以阅读以下文档:http://docs.marklogic.com/guide/search-dev/javascript#id_71243

(还有一点需要注意:您可能还想对运行按示例查询感兴趣 - 在此基础上构建原型文档并执行搜索。更多的信息在这里:http://docs.marklogic.com/guide/search-dev/javascript#id_60216

+0

Tamas的好建议的一个脚注:map()后处理器可以提供{snippet:...}规范,不再需要单独的documentSelect()调用。请参阅:http://docs.marklogic.com/guide/search-dev/javascript#id_71243 – ehennum

+0

如果我事先不知道我的单词'mark'的匹配是否会写入元素'author'在一些文件中。 – sjoerd999