2016-06-28 9 views
0

なぜSOLRが不器用な入力と空白の入力の結果を返すのか理解しがたいです。私は結果が一致しないと予想しているので、結果は私には意味をなさない。SOLRが冗談と空白の一致を返す

意味不明入力:

aksdhfkalsdfh

出力: Flower Home Folksy Shop Fynn

ブランク入力:

出力: Flower Home Folksy Shop Fynn

のschema.xml:

<types> 
    <fieldType name="string_ci" class="solr.TextField" sortMissingLast="true"  omitNorms="true"> 
    <analyzer type="index"> 
    <tokenizer class="solr.PatternTokenizerFactory" pattern="!~#$!" /> 
    <filter class="solr.LowerCaseFilterFactory" /> 
    <filter class="solr.ReversedWildcardFilterFactory" /> 
    </analyzer> 
</fieldType> 

<fieldType name="string" class="solr.StrField" sortMissingLast="true" omitNorms="true"/> 
<fieldType name="int" class="solr.TrieIntField" precisionStep="0" omitNorms="true" positionIncrementGap="0"/> 
<fieldType name="uuid" class="solr.UUIDField" indexed="true" /> 

Javaメソッド:事前に

company = "name_ci:*" + company.toLowerCase() + "*"; 
    company = company.replaceAll(" ", "*\\\\ "); 
    queryString += company; 
    queryString += " and type:comp"; 

    ...execute query 
    return list; 

ありがとう!

+2

あなたは管理ツールアナライザーを見て、これらのフィールドの分析によってどのようなことが分かりましたか。 –

答えて

0

ここにはいくつかの問題があり、実際にはname_ciのマッピングが表示されませんでした(私はstring_ciを想定しています)。いずれにせよ、トラブルシューティングの最善の方法は、デバッグフラグを追加して何が起きているかを確認することです。クエリを正しく取得してからSolrJでエンコードを開始するまでは、管理UIで再生します。

しかし、ここでヒントです:

  • は、私はあなたがダブルサイドワイルドカードとして*用語*を行うことができると信じていません。その機能が必要な場合は、代わりにアナライザ時間のnグラムを調べてください。
  • があり、タイプは:です。通常のクエリパーサーでは、(大文字)を使用する必要があります。 eDisMaxでは、lowercaseOperatorsパラメータをより柔軟に設定できます。現実的には、というタイプ(comp)をフィルタクエリに移動したいと思うかもしれません。これは、スコアリングに寄与しない純粋なバイナリ結果であるためです。
  • 小文字のを使用していたため、一般的なフィールドで一致する可能性があります。dfの任意の文字列とそれにコピーされています。それはなぜ不器用なマッチを説明するかもしれません。