2016-05-16 4 views
0

私は単純なアドレスデータベースを構築しています。 Addressという名前のクラスを住所がフィールド(街、市、州、郵便番号)に分割されているようにしてください。各フィールドはString型です。OrientDBフルテキストインデックス複数のフィールドでLuceneを使用して検索する

私はそれらの中の単語でアドレスを検索できるようにしたいと思います。例:検索された単語が通り名や市名などの住所であるかどうかを調べる つまり、住所のどの部分に興味があるかを指定することなく、ユーザーが簡単に検索できるようにします。

だから私は、次のコマンドと同じようにインデックスを作成しました:

create index Address.full on Address(street,city,state,ZIP) fulltext engine lucene

しかし、私は、次のクエリを実行するとき、私は結果やエラーメッセージが何も取得しない:

select * from Address where Address.full lucene "4*"を210 =>結果がありません。郵便番号が46250と46256の2つのレコードになります。

select * from Address where ZIP lucene "4*" =>「インデックス設定なしでlucene条件を評価することはできません」

select * from index:Address.full where key lucene "4*" =>ノー結果

さらに: select count(*) from index:Address.full => Luceneのインデックスを作成しない何らかの理由手段カウントとして0を返します。インデックスの作成時にエラーメッセージは表示されません。


どのようにすればいいですか?

結果が表示されない理由についてのクエリをデバッグする方法はありますか?

答えて

1

は、これが動作するはず行うクエリを入力し、次に、単一のフィールドを参照異なるインデックスを宣言してみてください:

select * from Address where ZIP lucene "4*" and street lucene "a*" 

enter image description here

+0

ありがとうございましたが、それは私が探しているものではありません。私はおそらく私の要求で明らかではなかった。私はそれを明確にしてみましょう: 検索された単語が通り、都市、ZIPまたは州のフィールドにあるかどうかにかかわらずレコードを見つけるクエリで検索できるようにします。 つまり、ユーザーが興味のあるアドレスの部分を指定することなく、簡単に検索できるようにしたいと考えています。 –

0

がを提供する所定の形で期待どおりに索引付けの仕組みフィールドには何の制約もありません!!


非常に徹底的な調査の結果、根底にあるバグが見つかりました。

一部のフィールドに制約がありました。たとえば、ZIPにはMAX = 10の制約があります。 Lucene(またはOrientDBの索引付けの一部)には、文字列フィールドにMAX制約がある場合、静かに失敗して空の索引を作成するバグがあります。

私は、この問題に関するバグレポートを提出し、うまくいけば、それはすぐに固定されます: https://github.com/orientechnologies/orientdb/issues/6149

関連する問題