Неверный результат запроса OrientDB для поиска lucene

У меня проблема с использованием индекса 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. Что я делаю не так?


person Marcelo D. Ré    schedule 18.10.2017    source источник


Ответы (1)


По умолчанию OrientDB поддерживает все анализаторы, перечисленные здесь, однако — это символы, которые не считаются базовой латиницей и доступны только при создании пользовательского анализатора с поддерживаемыми фильтрами, такими как ASCIIFoldingFilter.

Как только вы создадите и скомпилируете класс, импортируйте его .jar в каталог lib OrientDB, а затем создайте индекс с помощью собственного анализатора.

Тем временем быстрым решением будет:

SELECT FROM Foo WHERE text LUCENE "*a*" OR text LUCENE "*á*";
person dgiannotti    schedule 18.10.2017