【问题标题】:MarkLogic Java: Set Query Type to Value in StringQueryDefinitionMarkLogic Java:在 StringQueryDefinition 中将查询类型设置为值
【发布时间】:2017-10-15 09:52:37
【问题描述】:

我正在使用 MarkLogic Java API。我正在寻找一种方法来设置 StringQueryDefinition 的查询类型。类型应为“值”,如:https://docs.marklogic.com/guide/search-dev/searchdev#id_34905 中所述。

值:匹配特定 JSON 属性或 XML 元素中的整个文字值,例如字符串或数字。默认情况下,值查询使用完全匹配语义。例如,搜索“mark”将不会匹配“Mark Twain”。

我需要这个,因为我希望我的文本搜索只匹配确切的搜索词。

示例:对“mark”的搜索应仅与包含与某个键相关的“mark”一词的文档相匹配。所以,{"anExample1": {"key1": "mark", "key2":"someotheralue"}} 是一个有效的匹配。但{"anExample2": {"key1": "mark twain", "key2":"someotheralue"}} 不是有效匹配项。

对于这两个示例,我想获取返回的文档中的 URI 和位置。因此,搜索"mark" 应该返回uri/anExample1anExample1/key1

【问题讨论】:

  • 你有什么尝试吗?我不清楚在什么情况下您可以搜索“一二三”并使其与您的第二个示例文档相匹配。
  • 你是对的。我的例子很糟糕,对此感到抱歉。已编辑。
  • 请务必查看 StructuredQueryBuilder 和 SearchHandle。这些可能会成为您答案的一部分。您是否阅读过 Java 搜索指南? docs.marklogic.com/guide/java/searches
  • 我做到了。不幸的是没有运气。我不想预先指定搜索值应该匹配的键。作为搜索的返回,我只想要包含附加到文档中某个键的确切值的文档。
  • 如果我预先指定密钥,命令会是什么?所以在这个例子中,我会搜索“key1”==“mark”。不是很优雅,但我们可以为所有文档的所有值附加一个额外的键(即“extrakey”),然后搜索“extrakey”==“searcedValue”。

标签: marklogic


【解决方案1】:

尝试在您的字符串查询queryMgr.newStringDefinition().withCriteria("\"one two three\"");周围添加双引号

StringQueryDefinition 查询遵循搜索指南中The Default String Query Grammar 中记录的规则。

【讨论】:

    【解决方案2】:

    要搜索 "key1" = "mark",您需要执行以下操作:

    StructuredQueryBuilder sqb = new StructuredQueryBuilder();
    QueryDefinition query = sqb.value(sqb.element("key1"), "mark");
    SearchHandle results = queryMgr.search(query, new SearchHandle());
    

    从结果中你可以得到 uri:

    results.getMatchResults()[i].getUri()
    

    以及比赛地点:

    results.getMatchResults()[i].getMatchLocations()[j].getPath()
    

    【讨论】:

    • 谢谢,这有点帮助。不幸的是,最初的问题仍然悬而未决,因为最终我想在不知道它匹配哪个键的情况下准确搜索“标记”。我将尝试在我的数据中的任何地方附加一个额外的密钥,这在任何地方都是相同的,但这会用这个密钥污染我的原始数据。
    • 您可以考虑的另一个选项是创建一个封装可能元素列表的字段。然后您可以执行上述操作,但将 sqb.field("catchall") 替换为 sqb.element("key1")。列举它们应该不是不可能的。这不会污染您的数据。
    猜你喜欢
    • 1970-01-01
    • 2014-03-29
    • 1970-01-01
    • 1970-01-01
    • 2018-12-01
    • 2022-10-24
    • 1970-01-01
    • 1970-01-01
    • 2016-11-30
    相关资源
    最近更新 更多