2016-04-06 12 views
-1

私はOrientDb 2.1.13を使用します。OrientDbはリンクされたクラスのluceneエンジンでクエリを実行します

私は、次のデータベース構造

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) 

を持っていると私は、次の値

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


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

を持って、私は次のクエリを使用して、エリアからデータを抽出しようとしましたが、何も抽出されません。

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

代わり私は

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

(=代わりLUCENEを使用して)データを抽出することができる次のクエリを使用して、このクエリを使用して(そうで直接使用される場合のLuceneエンジンはうまく動作):

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

luceneでインデックスされたフィールドを持つリンクされたクラスを照会する正しい方法は何ですか。私の質問は次のとおりです:

質問1)がうまくいかないバグはありますか?

別の構文を使用する必要がありますか?

または、3)のようにサブクエリを使用する以外の方法はありませんか?このクエリ

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

答えて

1

ターゲットクラスはエリアであるため、あなたが抽出でき、このクエリ

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

でクラスエリアのインデックスではなくAREANAME

上を探索していますデータを使用していますが、インデックスを使用していません

フィールド名

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

にインデックスをSE私は3

+0

にこれだけLUCENEまたはインデックスのいずれかの種類のために有効であるようにあなたは、サブクエリを使用しなければならないことと思いますか? –

+1

任意の種類のインデックスに対して有効です –

関連する問題