【问题标题】:Marklogic search particular word in simple array valuesMarklogic 在简单数组值中搜索特定单词
【发布时间】:2022-01-04 11:40:00
【问题描述】:

我在文档中有简单的数组

Doc1- Arr=["Development,1","Test,2","Production,3","Production-Service,4"]
Doc2- Arr=["Development,1","Test,2","Production-Service,4"]

如果我在这里搜索 Production 我应该只得到 Doc1。 我无法使用 json 属性值查询,因为在查询时我不会获得关联的数字。 我尝试使用单词查询,但它返回了两个文档。 我可以使用简单的查询获得期望的结果吗? 提前感谢您的帮助!

【问题讨论】:

  • 您似乎正在为每个数组值存储一个文本值和某种索引或 ID。如果您选择其中一个,或者将这些值存储为某种数据结构,而不是逗号分隔的字符串值,它可能会简化事情。

标签: arrays search marklogic-9


【解决方案1】:

在单词查询中包含,,使用punctuation-sensitive 搜索搜索Production,,该搜索应排除具有Production-Service 的值:

cts:search(doc(), 
  cts:json-property-word-query("Arr", "Production,")
)

您可以使用通配符表达式:

cts:search(doc(), 
  cts:json-property-word-query("Arr", "Production,*", "wildcarded")
)

如果数字后缀始终为一位,则可以使用? 代替*

cts:search(doc(), 
  cts:json-property-word-query("Arr", "Production,?", "wildcarded")
)

【讨论】:

  • 我也有类似于以下示例的文档 Doc3- Arr=["Development,1","Test,2","Production,3","Sub-Production-Service,5"] Doc4 - Arr=["Development,1","Test,2","Sub-Production-Service,6"] 所以,我尝试使用 json 属性值进行通配符未过滤搜索,但我也得到了误报结果。我也尝试过范围查询 cts.andQuery([cts.elementRangeQuery('Arr','>=',"production,"),cts.elementRangeQuery('Arr','marklogic.com/collation/en/S4 的范围索引,使其对标点符号敏感。但仍然没有运气。
  • 尝试使用通配符查询进行过滤搜索。 cts.jsonPropertyValueQuery("Arr","production,*",["wildcarded","punctuation-sensitive", "case-insensitive", "whitespace-sensitive"]) 按预期工作。但有点慢。谢谢
猜你喜欢
  • 2019-12-29
  • 1970-01-01
  • 2015-05-22
  • 2016-05-20
  • 1970-01-01
  • 1970-01-01
  • 2015-09-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多