在我的Java项目中发送通配符查询时,我遇到了一个错误结果的问题。在我的Marklogic数据库中,我保存了多个具有相同结构的json文件。我想接收那些在名为“icsList”(它是字符串列表)的字段中以给定字符串开头的json。
json中的示例icsList如下所示:
- “许可列表”:[“11.040.40”,“12.50.80”]
- “许可列表”:[“12.50.60”]
- “许可列表”:[“50.010.10”]
我的示例结果:
请求-字符串“50”结果-所有json(即使是icsList中没有“50”的json)
请求-字符串“50.”结果-icsList中包含“50.”的JSON(例如:“50.010.10”、“50.010.20”以及“12.50.60”)
正如我前面提到的,我的主要目标是得到所有在“icsList”字段中以给定字符串开头的json。我的次要目标是去掉请求字符串末尾的必要点。
我的代码是:
第一个
在pom.xml中,我有:
<dependency>
<groupId>com.marklogic</groupId>
<artifactId>marklogic-client-api</artifactId>
<version>5.5.3</version>
</dependency>
1条答案
按热度按时间waxmsbnn1#
如果对数据库启用双字符搜索,则可以搜索"50 *"而不是"50. *",但这可能会显著影响索引的大小和接收性能,因此可能不建议这样做。
您可能需要在数据库上启用三字符搜索或尾随通配符搜索,以便能够使用
"50.*"
或"50.* *"
等短通配符值进行有效搜索。https://docs.marklogic.com/guide/search-dev/wildcard#id_39731
如果使用
value()
而不是单词查询来构造cts:json-property-value-query()
,并在通配符值中包含.
,则它将只查找以50.
开头的最后一个文档。例如,以下搜索:
或:
请注意,
cts:json-property-value-query
中值的文本内容与cts:word-query
中的短语被视为相同,其中短语是属性值。因此,任何通配符和/或词干规则都被视为短语。例如,如果"hello friend"
的属性值为查询启用了通配符,"he*"
的cts:json-property-value-query
将不会匹配,因为通配符匹配不跨越单词边界,但"hello *"
的cts:json-property-value-query
将匹配。"*"
的搜索将匹配,因为"*"
通配符本身被定义为匹配该值。类似地,将词干规则应用于每个术语,因此当为查询启用词干时,对"hello friends"
的搜索将匹配,因为"friends"
与"friend"
匹配。进行数据库范围更改的另一种方法是创建一个字段,该字段具有必要的索引设置,以便于对该字段进行双字符通配符搜索。
然后,您可以使用尾随通配符搜索字段:
根据字段而不是jsonProperty进行搜索: