我正在构建一个简单的地址数据库。有一个名为Address
的类,其中的地址分为字段(街道,城市,州,ZIP)。每个字段都是String类型。
我希望能够通过其中的任何字词搜索地址。例如:找到搜索到的单词是否在街道名称或城市名称等的地址。 换句话说,我希望用户能够轻松搜索,而无需指定他们感兴趣的地址部分。
所以我用以下命令创建了一个索引:
create index Address.full on Address(street,city,state,ZIP) fulltext engine lucene
但是当我执行以下查询时,我得不到任何结果或错误信息:
select * from Address where Address.full lucene "4*"
=>没有结果,应该是邮政编码为46250和46256的2条记录
select * from Address where ZIP lucene "4*"
=>获取错误消息:“无法在没有索引配置的情况下评估lucene条件。”
select * from index:Address.full where key lucene "4*"
=>没有结果
此外:
select count(*) from index:Address.full
=>返回0作为计数,这意味着由于某种原因,Lucene不会创建索引。创建索引时没有错误消息。
我该如何做到这一点?
有没有办法调试查询为什么没有结果?
答案 0 :(得分:1)
尝试声明引用单个字段的不同索引,然后键入执行此操作的查询应该起作用:
select * from Address where ZIP lucene "4*" and street lucene "a*"
答案 1 :(得分:0)
索引在给定表单中按预期工作提供对字段没有约束!!
经过非常彻底的调查,我发现了潜在的错误!
我的一些领域有限制。例如,ZIP具有MAX = 10约束。 Lucene(或OrientDB的索引的某些部分)有一个错误,导致它在字符串字段上有一个MAX约束时静默失败并创建一个空索引。
我提交了一个关于此问题的错误报告,希望很快就会修复: https://github.com/orientechnologies/orientdb/issues/6149