Marklogic search:使用jsearch仅输出匹配元素和文档的uri

Marklogic search:使用jsearch仅输出匹配元素和文档的uri,marklogic,Marklogic,我不熟悉MarkLogic。我正在寻找一种方法,在使用jsearch时只从文档中输出匹配的元素,但是在执行查询时,不知道要与搜索词匹配的元素。让我举例说明: jsearch.documents() .where(cts.wordQuery('mark')) .result(); 这给了我所有包含“标记”的文档,例如 { "results": [ { "index": 0, "uri": "/books/twain4.json", "score": 1

我不熟悉MarkLogic。我正在寻找一种方法,在使用jsearch时只从文档中输出匹配的元素,但是在执行查询时,不知道要与搜索词匹配的元素。让我举例说明:

jsearch.documents()
  .where(cts.wordQuery('mark'))
  .result();
这给了我所有包含“标记”的文档,例如

{
  "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."
    }
  }
  , ...
但是,我想知道如何调整查询,以便在找到匹配项的每个文档中只提供匹配元素:

{
  "results": [
  {
    "index": 0, 
    "uri": "/books/twain4.json", 
    "score": 14336, 
    "confidence": 0.432453483343124, 
    "fitness": 0.7490314245224, 
    "document": {
      "author": "Mark Twain", 
    }
  }
  , ...
这里只有author元素具有匹配项,但在执行查询时不知道该元素。我只想显示上面提到的作者的匹配值。
提前谢谢

这里有几个选项

如果只想对一个JSON属性使用jSearch运行搜索,可以运行以下操作:

const jsearch = require('/MarkLogic/jsearch');
const term = 'mark';
const query = cts.jsonPropertyWordQuery('author', term);
jsearch.documentSelect(cts.search(query), { snippet: { query: query } });
如果您想控制jSearch返回内容的方式,可以应用:

您还可以将这两者结合起来:

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'] } });
有关更多信息,您可以阅读以下文档:


(还有一个注意事项:您可能还希望通过示例运行查询—在示例中构建原型文档并基于此执行搜索。此处的更多信息:

关于Tamas的好建议的一个脚注:map()后处理器可以提供{snippet:…}规范,从而无需单独的documentSelect()请看:如果我事先不知道我的单词“mark”的匹配将出现在某个文档中的元素“author”上,该怎么办。
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'] } });