我正在运行类似于以下内容的简单查询:
FOR node IN FULLTEXT("myCollection", "myAttribute", "abcdef")
RETURN node
我在myCollection中有一个节点,myAttribute ==“abcdef”,myAttribute上有一个全文索引,上面的查询工作正常并返回一个结果 . 但是,以下查询不返回任何结果:
FOR node IN FULLTEXT("myCollection", "myAttribute", "abcde")
RETURN node
文档中的示例在一个句子中搜索单词“the”,所以我希望FULLTEXT()搜索“abcde”应匹配“abcdef” . 有人可以向我解释我缺少什么或需要做什么来使FULLTEXT(“myCollection”,“myAttribute”,“abcde”)找到我的节点myAttribute ==“abcdef” .
谢谢!
- 更新:我过度简化了上面的查询,试图让它简短易懂 . 我应该提供一个示例查询,例如:
FOR node IN FULLTEXT("myCollection", "myAttribute", "bcde")
RETURN node
展示我想做什么和什么不行 . ArangoDB是否支持以任何方式使用索引进行子串搜索 . 我正在尝试向我的应用程序添加文本搜索,并且担心使用LIKE将导致对多个字段上的每个集合进行完整的集合扫描(不区分大小写)并且不会扩展 . 这篇文章实际上是关于如何在数据库中的多个集合(以及许多但不是所有属性)中执行高性能文本搜索 .
很抱歉过于简单化了 . 希望这更清楚 . 有没有一种在ArangoDB中实现“搜索”的好方法,它将支持用户在搜索框中输入搜索字符串时所期望的搜索语义?
2 回答
因为全文搜索整个单词不属于它 .
你应该在这个词之前使用 "prefix:" .
此查询应该有效,以获取更多参考和其他功能:Fulltext functions
如果您只想查找子字符串,请考虑使用CONTAINS而不是LIKE .
我使用单词
foo
作为针,进行了十次这样的简单比较:Note
CONTAINS
区分大小写,而LIKE
的第三个参数使大小写不敏感成为一个选项 .为了解决这个问题,我可以添加LOWER,如果可能的话:在将文本插入数据库之前预处理文本 .
This issue可能相关,这与此问题有关:On multiple index usage in ArangoDB .
(我实际上使用了非英语单词而不是
foo
作为针,但那是无关紧要的 . )