2016-07-04 27 views
0

私はそれが私がアップルを検索場合部分一致

{ 
    input: [ 
    "apple iphone 6" 
    ], 
    output: "apple iphone 6", 
    weight: 5, 
    payload: { 
    category: "mobiles" 
    } 
} 

としてインデックスの値は、それが与えて有するsearch_suggestは以下

search_suggest: { 
    type: "completion", 
    analyzer: "simple", 
    payloads: true, 
    preserve_separators: false, 
    preserve_position_increments: false, 
    max_input_length: 50 
} 

を有するという名前のフィールドを有します私の結果。しかし、もし私がiphoneを検索しても、私には何の結果も与えていない。

これを完了するための方法はありますか? は、私は、エッジ-nグラムの提案者の認識しています6

  • iphone 6
    • AppleのiPhoneとインデックス入力する必要がありますか。しかし、それは重複も示唆されます。

      助けてください。

    答えて

    0

    これは、誰もがまだ答えを探している場合は、

    完了提案者は、プレフィックス一致するのに適して

    { 
    "input": [ "apple", "iphone", "6" ] 
    } 
    
    +0

    私が "apple ip"を提案した場合、結果が正しく表示されません –

    +0

    @LijoAbrahamこの "入力"についての質問:["apple"、 "iphone"、 "6"、 "apple iphone 6"] – SML

    +0

    iPhone 6についてはどうですか? :) –

    1

    あなたの問題を解決する必要があります。したがって、入力では、あなたのフレーズの可能な接尾辞を提供することができます。これにより、途中から開始した場合でもプレフィックス検索を行うことができます。サブ文字列検索とも呼ばれます。例えば

    :あなたが見ることができるように

    { 
        "text" : "Courtyard by Marriot Munich City", 
        "text_suggest" : { 
        "input": [ 
         "Courtyard by Marriot Munich City", 
         "by Marriot Munich City", 
         "Marriot Munich City", 
         "Munich City", 
         "City" 
        ], 
        "output" : "Courtyard by Marriot Munich City", 
        "weight" : 11, 
        "payload": { "id" : 314159 } 
        } 
    } 
    

    、あなたは「マリオットミュンヘンシティコートヤード」以内に開始どこでも結果が得られます。 (ほとんどの場合、ストップワードとして破棄されるため、「by」は除外されます)。

    一般的な検索文字列では、最大4〜5ステップで十分です。また、フィルターを使用してストップワードを処理する場合は、入力のストップワードを心配する必要はありません。私は「リンゴのIP」を示唆場合次に、それが結果を与えることはありません

    サンプル指数アナライザ

    { 
        "settings" : { 
        "analysis" : { 
         "filter" : { 
         "suggester_stop" : { 
          "type" : "stop", 
          "stopwords" : "_english_", 
          "remove_trailing" : false, 
          "ignore_case" : true 
         }, 
         "suggester_stemmer" : { 
          "type" : "stemmer", 
          "name" : "light_english" 
         } 
         }, 
         "analyzer" : { 
         "suggester_analyzer" : { 
          "type" : "custom", 
          "tokenizer" : "standard", 
          "char_filter" : ["html_strip"], 
          "filter" : [ 
          "standard", 
          "lowercase", 
          "suggester_stop", 
          "suggester_stemmer" 
          ] 
         } 
         } 
        } 
        } 
    } 
    

    は、これは、あなたのコメントの1で述べた問題を解決します。 iphone 6はどうですか?

    { 
        "text_suggest" : { 
        "input": [ 
         "apple iphone 6", 
         "iphone 6" 
        ], 
        "output" : "apple iphone 6", 
        "weight" : 11 
        } 
    } 
    

    あなたは、人々がとにかく検索するために、共通ではありません「りんご6」のためになり得ることはありませんしかし、あなたはなど、「リンゴのIP」、「iphone 6」の両方の検索結果を取得します。