OrientDB对lucene搜索的查询结果不正确

时间:2017-10-18 16:12:58

标签: orientdb orientdb2.2

使用OrietDB Lucene索引时遇到问题。当我使用它查询时,它返回一个不完整的数据集。这是一个例子:

create class Foo extends V
create property Foo.text string
create index Foo.text_spanish on Foo(text) fulltext engine lucene metadata 
        { "analyzer": "org.apache.lucene.analysis.es.SpanishAnalyzer", 
          "index": "org.apache.lucene.analysis.es.SpanishAnalyzer", 
          "query": "org.apache.lucene.analysis.es.SpanishAnalyzer", 
          "allowLeadingWildcard": true             
}

insert into Foo (text) values ("axxx")
insert into Foo (text) values ("áxxx")
insert into Foo (text) values ("xxxa")
insert into Foo (text) values ("xxxá")
insert into Foo (text) values ("xxaxx")
insert into Foo (text) values ("xxáxx")

现在当我运行此查询时:

select from Foo where text lucene "*a*"

我明白了:

xxáxx
xxaxx
xxxa
axxx

它错过了

áxxx
xxxá

如果我这样做:

select from Foo where text lucene "*á*"

我明白了:

áxxx
xxxá

然后错过了其他人。即使在这种情况下它也应该显示xxáxx。 我做错了什么?

1 个答案:

答案 0 :(得分:1)

默认情况下,OrientDB支持列出的所有分析器here,但是有些字符不被考虑" Basic Latin "并且仅在创建具有受支持的过滤器的自定义分析器时可用,例如ASCIIFoldingFilter

创建并编译类后,将其.jar导入OrientDB的lib目录,然后使用自定义分析器创建索引。

与此同时,一个快速的解决方案是:

SELECT FROM Foo WHERE text LUCENE "*a*" OR text LUCENE "*á*";
相关问题