Marklogic如何在简单数组值中搜索特定单词实现精准匹配返回目标文档
可以实现,以下是三种不同场景下的实现方案,可根据你使用的存储组件选择:
方案1:正则精确匹配(无需调整现有存储结构)
绝大多数文档数据库(MongoDB、Elasticsearch等)都支持正则查询,你可以直接匹配数组中仅包含Production前缀加逗号加数字的项,示例查询语句(以MongoDB为例):
db.collection.find({ Arr: { $regex: /^Production,\d+$/ } })
该正则会严格过滤掉带Production-Service的项,无需提前知道Production对应的关联编号即可实现需求。
方案2:调整字段分词策略+精确查询(适用于搜索引擎场景)
你之前用词查询返回两个文档,是因为默认分词器把连字符-识别为分隔符,将Production-Service拆成了Production和Service两个独立词。
你可以给Arr字段新增一个不分词的keyword类型子字段,存储完整的数组项内容,之后用前缀查询匹配Production,开头的完整项即可(Elasticsearch示例):
{ "query": { "prefix": { "Arr.keyword": "Production," } } }
方案3:应用层过滤(最轻量实现)
如果你的数据量不大,不需要优化查询性能,可以先用现有词查询拿到初步结果,再在应用层做二次过滤:遍历每个文档的Arr数组,筛选出存在Production,开头项的文档即可,实现成本最低。
内容的提问来源于stack exchange,提问作者swat
相关产品推荐
相关产品推荐

