2016-05-16 150 views
0

我正在构建一个简单的地址数据库。有一个名为Address的课程,其中地址被分解为字段(街道,城市,州,邮政编码)。每个字段都是字符串类型。OrientDB全文索引使用Lucene在多个字段上搜索

我希望能够通过它们中的任何单词来搜索地址。例如:找到搜索到的单词是否在街道名称或城市名称等中的地址。 换句话说,我希望用户能够轻松搜索,而不必指定他们感兴趣的地址的哪个部分。

因此,我创建像下面的命令索引:

create index Address.full on Address(street,city,state,ZIP) fulltext engine lucene

但是,当我执行以下查询我没有得到任何结果或错误消息:

select * from Address where Address.full lucene "4*" =>没有结果,应该是2个记录,其中邮政编码是46250和46256

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的不创建索引。创建索引时没有错误消息。


我该如何做到这一点?

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

回答

1

试图声明不同的指数指的是单场,然后在查询执行这应该工作:

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

enter image description here

+0

谢谢你,但它不是我要找的。我的请求可能不太清楚。让我澄清一下: 我希望能够通过查询找到记录,无论搜索到的单词是在街道,城市,邮政编码还是州字段。 换句话说,我希望用户能够轻松搜索,而无需指定他们感兴趣的地址的哪一部分。 –

0

索引将按预期在给定的形式于提供有没有任何限制!


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

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

我就这个问题提交一个bug报告,并希望这将很快得到固定: https://github.com/orientechnologies/orientdb/issues/6149