2011-12-15 18 views
0

oracleデータベースを索引付けするためにsolrを構成しようとしています。私は、データベース内のすべての検索可能列をインデックス化し、Solrのフィールドとにおけるので、私の選択クエリの列名と同じ名前を使用している Solr q結果とデータベースSQL結果

私のschema.xmlでそのように
<fieldType name="text" class="solr.TextField" positionIncrementGap="100"> 
    <analyzer type="index"> 
    <tokenizer class="solr.StandardTokenizerFactory"/> 
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    <filter class="solr.RemoveDuplicatesTokenFilterFactory"/> 
<filter class="solr.ReversedWildcardFilterFactory" withOriginal="true" 
     maxPosAsterisk="3" maxPosQuestion="2" maxFractionAsterisk="0.33"/> 
    </analyzer> 
    <analyzer type="query"> 
    <tokenizer class="solr.StandardTokenizerFactory"/> 
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/> 
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    </analyzer> 
</fieldType> 

をリードするワイルドカード検索や様々な他のフィルタを有効にする必要がありdb-data-config.xmlは単にselect * fromのビューです。

我々はSolrの、データベースから異なる結果を受けて、以下のようにSQLクエリ1307件のレコードのみ7

(COLUMN1:(Value0) AND COLUMN2:(Value1)) 
    OR (COLUMN3:(Value2 OR Value3 OR Value4)) 
    AND (COLUMN4:(Value5)) 
戻り以下のよう

select count(*) from VIEW 
where (COLUMN1 = 'Value0' and COLUMN2='Value1') 
OR COLUMN3 in ('Value2','Value3','Value4') 
AND COLUMN4='Value5' 

とSolrのクエリを返す例えば

を照会

私たちはすべての関連データを持つ1つのビューでのみ動作しています。 solrの設定はビュー内のすべてのカラムにインデックスされ、結果は似ていると思っていました。誰かが矛盾を親切に説明できますか?

EDIT

尋ねたように値を追加:Solrのクエリ

COUNTRY_NAME:(United States) AND ELEMENT_CODE:(CT)) OR (UNIT_STATUS:(Operating OR Order OR Shipped)) AND (FRAME_GR_DISPLAY:(06A)) 

データベースクエリ一般的に使用すると、SQLのような逐語的な一致がない場合は、あなたが分析したフィールドを使用してはならない話す

select * from VIEW where 
(COUNTRY_NAME = 'United States' AND ELEMENT_CODE='CT') 
OR UNIT_STATUS in ('Operating','Order','Shipped') 
    AND FRAME_GR_DISPLAY='06A' 
+0

「Value0」ではなく「Valu0」と表示されています –

+0

実際の値は何ですか?彼らは本当に 'value0'、 'value1'などですか? –

+0

errいいえ。実際の値は、列に関連する文字列型です。たとえば、国はunited statesなど... – sunny

答えて

0

をタイプ。たとえば、デフォルトスキーマのstringフィールドタイプ(クラスsolr.StrField)は分析されません。

分析フィルタとトークナイザで迷子になって、何が起こっているのかよくわからない場合は、SolrクエリーストリングでdebugQuery = onを使用するか、Solr analysis toolを使用してください。

+0

しかし、私はデザインによって分析されたフィールドタイプを必要とする先行するワイルドカードクエリを有効にしたいと考えています。 – sunny

+0

@sunny正しいトークナイザだけでなく、先頭のワイルドカードを使用してもよろしいですか?どんな種類の質問(具体的に)が必要ですか?これまで説明してきた例には、ワイルドカードの検索クエリはありません。 –

+0

私は、私が自分のsolrfield、textを適切に設定したので、私が先行するワイルドカードクエリを使用することを意味します。私たちのエンドユーザは、contains with、ends withなどのフレーズを使用していました。これはワイルドカードクエリを導く適切なsolrにマップされており、正常に動作しています。すべての論理演算子を使用して検索を有効にします。より大きい、より小さい、より小さい、等のようなテキスト検索は..などで始まります。 – sunny