我在Cloudant中有许多文档,这些文档的ID字段为字符串类型。ID可以是一个简单的字符串,例如“ aaa”,“ bbb”或作为文本存储的数字,例如“ 111”,“ 222”等。我需要能够使用上述字段进行全文搜索,但是我遇到了一些问题问题。
假设我有两个文档,分别具有ID =“ aaa”和ID =“ 111”,然后使用查询进行搜索:
按预期返回第一个文档
什么都不返回,但是
返回第二个文档,因此至少有一种方法可以检索它。
不幸的是,当搜索范围时:
我没有结果,我也不知道该如何解决该问题。这种情况下有什么特殊语法吗?
更新:
索引功能:
function(doc){
if(!doc.ID) return;
index("ID", doc.ID, { index:'not_analyzed_no_norms', store:true });
}
将索引更改为已分析没有帮助。分析器本身是关键字,但更改为标准也无济于事。
更新2
仅添加更多上下文,因为我认为我错过了一个关键点。我正在索引的字段将使用范围进行搜索,用户可以提供最小值和最大值。因此,可能其中一个将数字存储为字符串,而另一个将是标准的非数字文本。例如,搜索ID> =“ 11”和ID <=“ foo”的所有文档。
假设数据库包含ID为“ 1”,“ 5”,“ alpha”,“ beta”,“ gamma”的文档,则此查询应返回“ 5”,“ alpha”,“ beta”。请注意,实际上应该返回“ 5”,因为字符串“ 5”大于字符串“ 11”。
我们的团队只是想出一种解决方法。我们设法通过在上限值上添加一些任意字符(例如'a),并引入其他搜索词来排除ID介于上限值和上限值+'a'之间的文档,从而获得适当的结果。
搜索范围时
编号:[X TO Y]
实际的查询是
(ID:[X TO Ya]和-ID:{Y TO Ya])
例如,要查找ID在23到758之间的文档,我们执行
(ID:[23至758a]和-ID:{758至758a])。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句