2016-04-06 4 views
-1

Ich verwende OrientDb 2.1.13.OrientDb Abfrage mit Lucene-Engine auf verknüpfte Klasse

Ich habe folgende Datenbankstruktur

Area extends V   
--------------------------- 
Field  Type 
--------------------------- 
names  LinkMap to AreaName 



AreaName extends V 
--------------------------- 
Field  Type 
--------------------------- 
language String 
name  String (with a Lucene Index on this field) 

Und ich habe folgende Werte

Area 
------------------------------ 
@rid   names 
------------------------------ 
#12:6025  {"en":"#13:6025"} 


AreaName 
------------------------------ 
@rid   language  name 
------------------------------ 
#12:6025  en   Africa 

Ich habe versucht, Daten aus der Gegend extrahieren Sie die folgende Abfrage verwenden, aber nichts gewonnen wird.

1) select from Area where names.en.name lucene 'Africa*' 

mit Anstatt der folgenden Abfrage kann ich Daten extrahieren (mit = statt LUCENE)

2) select from Area where names.en.name = 'Africa' 

und auch diese Abfrage mit (so die Lucene-Engine arbeitet gut genutzt, wenn sie direkt):

3) select from Area where names.en in 
    (select from AreaName where name lucene 'Africa*') 

Ich würde gerne wissen, welche der richtige Weg ist, um eine verknüpfte Klasse mit einem Feld indiziert mit Lucene abzufragen. Meine Fragen sind:

Ist ein Fehler, dass die Abfrage 1) nicht funktioniert?

Es ist notwendig, eine andere Syntax zu verwenden?

Oder der einzige Weg ist, eine Unterabfrage zu verwenden, wie in 3)?

Antwort

1

Mit dieser Abfrage

select from Area where names.en.name lucene 'Africa*' 

die Zielklasse ist Area und deshalb sind die Indizes für die Klasse Umgebung gesucht und nicht auf areaname

Mit dieser Abfrage

select from Area where names.en.name = 'Africa' 

Sie extrahieren Daten, aber Sie verwenden nicht den Index

Mit dieser Abfrage Sie u se der Index auf den Feldnamen

select from Area where names.en in 
    (select from AreaName where name lucene 'Africa*') 

Ich denke, dass Sie die Unterabfrage wie in 3.

+0

Dies gilt nur für LUCENE oder für jede Art von Index verwenden müssen? –

+1

Es ist gültig für jede Art von Index –