【问题标题】:OrientDB Full Text Index Search using Lucene on multiple fieldsOrientDB 全文索引搜索在多个字段上使用 Lucene
【发布时间】:2016-05-16 12:27:48
【问题描述】:

我正在构建一个简单的地址数据库。有一个名为Address 的类,其中地址被分解为字段(街道、城市、州、ZIP)。每个字段都是String类型的。

我希望能够通过地址中的任何单词来搜索地址。例如:查找地址,无论搜索词是在街道名还是城市名等。 换句话说,我希望用户能够轻松搜索,而无需指定他们感兴趣的地址部分。

所以我使用以下命令创建了一个索引:

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


我怎样才能做到这一点?

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

【问题讨论】:

    标签: lucene orientdb


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢,但这不是我要找的。我的要求可能不清楚。让我澄清一下:我希望能够通过查询找到记录,而不管搜索的词是在街道、城市、邮政编码还是州字段中。换句话说,我希望用户能够轻松搜索,而无需指定他们感兴趣的地址部分。
    【解决方案2】:

    索引在给定的表单中按预期工作提供字段没有限制!!


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

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

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

    【讨论】:

      猜你喜欢
      • 2012-02-12
      • 2016-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多