OrientDB全文索引在多个字段上使用Lucene进行搜索

时间:2016-05-16 12:27:48

标签: lucene orientdb

我正在构建一个简单的地址数据库。有一个名为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不会创建索引。创建索引时没有错误消息。

我该如何做到这一点?

有没有办法调试查询为什么没有结果?

2 个答案:

答案 0 :(得分:1)

尝试声明引用单个字段的不同索引,然后键入执行此操作的查询应该起作用:

select * from Address where ZIP lucene "4*" and street lucene "a*"

enter image description here

答案 1 :(得分:0)

索引在给定表单中按预期工作提供对字段没有约束!!

经过非常彻底的调查,我发现了潜在的错误!

我的一些领域有限制。例如,ZIP具有MAX = 10约束。 Lucene(或OrientDB的索引的某些部分)有一个错误,导致它在字符串字段上有一个MAX约束时静默失败并创建一个空索引。

我提交了一个关于此问题的错误报告,希望很快就会修复: https://github.com/orientechnologies/orientdb/issues/6149