2017-10-18 148 views
0

我有使用OrietDB Lucene索引的问题。当我使用它查询时,它会返回一个不完整的数据集。这里是例子:OrientDB对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

默认情况下,OrientDB支持上市here所有的分析仪,但也有不被视为“基本拉丁语”,并与支持的过滤器创建自定义分析,只有当可用字符,如ASCIIFoldingFilter

一旦您创建并编译该类,请将其导入OrientDB的lib目录中,然后使用您的自定义分析器创建索引。

同时快速的解决办法是:

SELECT FROM Foo WHERE text LUCENE "*a*" OR text LUCENE "*á*";