2017-10-18 5 views
0

J'ai un problème en utilisant OrietDB Lucene index. Lorsque je l'interroge, il renvoie un jeu de données incomplet. Voici l'exemple:OrientDB résultat de requête incorrecte contre la recherche 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") 

maintenant quand je lance cette requête:

select from Foo where text lucene "*a*" 

Je reçois:

xxáxx 
xxaxx 
xxxa 
axxx 

Et il manqué

áxxx 
xxxá 

Et si je lance ceci:

select from Foo where text lucene "*á*" 

je reçois:

áxxx 
xxxá 

Et manquer le reste. Même dans ce cas, il devrait montrer xxáxx. Qu'est-ce que je fais de mal?

Répondre

1

Par défaut, OrientDB prend en charge tous les analyseurs répertoriés here, mais il y a des personnages qui ne sont pas considérés comme « Latin de base » et ne sont disponibles que lors de la création d'un analyseur personnalisé avec des filtres pris en charge, tels que ASCIIFoldingFilter. Une fois que vous avez créé et compilé la classe, importez son fichier .jar dans le répertoire lib de l'OrientDB, puis créez l'index avec votre analyseur personnalisé.

En attendant une solution rapide serait:

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