gpt4 book ai didi

lucene - Cloudant - 使用存储为文本的数字进行 Lucene 范围搜索

转载 作者:行者123 更新时间:2023-12-02 08:09:14 24 4
gpt4 key购买 nike

我在 Cloudant 中有许多文档,它们具有字符串类型的 ID 字段。 ID 可以是一个简单的字符串,例如“aaa”、“bbb”或存储为文本的数字,例如“111”、“222”等。我需要能够使用上述字段进行全文搜索,但遇到了一些问题。

假设我有两个文档,ID =“aaa”和ID =“111”,然后使用查询进行搜索:

  • ID:aaa
  • ID:“aaa”
  • ID:[aaa TO zzz]
  • ID:[“aaa”TO“zzz”]

按预期返回第一个文档

  • ID:111

什么也没返回,但是

  • ID:“111”

返回第二个文档,因此至少有一种方法可以检索它。

不幸的是,当搜索范围时:

  • ID:[111 至 999]
  • ID:[“111”至“999”]

我没有得到任何结果,而且我不知道如何解决这个问题。对于这种情况有什么特殊的语法吗?

更新:

索引函数:

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' 之间的文档。

搜索范围时

ID:[X 到 Y]

实际查询是

(ID:[X 到雅] AND -ID:{Y 到雅])

例如,要查找 ID 在 23 到 758 之间的文档,我们执行

(ID:[23 至 758a] 和 -ID:{758 至 758a])。

关于lucene - Cloudant - 使用存储为文本的数字进行 Lucene 范围搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34269055/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com