10

ESは初めてなので、ばかげた質問かもしれませんが、ワイルドカードを使用して検索しようとしています。例: "SOMECODE*"および"*SOMECODE"

正常に動作しますが、ドキュメントの値に。が含まれている場合があります"SOMECODE/FRED"
問題は*、何とでも一致することです(何も含まれていません)。
*SOMECODEにヒットしSOMECODE/FREDます。

検索してみまし*/SOMECODEたが、何も返されません。
フィールドのトークン化が根本的な問題だと思います。
つまり、/値は2ワードになります。

フィールド上の地図をに設定してみましたnot_analyzedが、まったく検索できません。

私はそれを間違っていますか?

ありがとう

4

1 に答える 1

14

を設定するnot_analyzedと、完全一致のみが許可されます (例:"SOMECODE/FRED"大文字と小文字および特殊文字のみ)。

私の推測では、標準のアナライザーを使用していると思います (指定しない場合は、デフォルトのアナライザーです)。その場合、Standard はスラッシュをトークン セパレータとして扱い、2 つのトークン[somecode]とを生成し[fred]ます。

$ curl -XGET 'localhost:9200/_analyze?analyzer=standard&pretty' -d 'SOMECODE/FRED'
{
    "tokens" : [ {
    "token" : "somecode",
    "start_offset" : 0,
    "end_offset" : 8,
    "type" : "<ALPHANUM>",
    "position" : 1
  }, {
    "token" : "fred",
    "start_offset" : 9,
    "end_offset" : 13,
    "type" : "<ALPHANUM>",
    "position" : 2
  } ]
}

この動作が望ましくない場合は、特殊文字で分割されないトークナイザーに変更する必要があります。ただし、これのユースケースには疑問があります。通常、これらのタイプの文字を分割する必要があります。

于 2013-01-30T20:56:16.157 に答える