/ / ElasticSearch edgeNGram - elasticsearch

ElasticSearch edgeNGram - elasticsearch

私は以下の設定とアナライザーを持っています。

put /tests
{
"settings": {
"analysis": {
"analyzer": {
"standardWithEdgeNGram": {
"tokenizer": "standard",
"filter": ["lowercase", "edgeNGram"]
}
},
"tokenizer": {
"standard": {
"type": "standard"
}
},
"filter": {
"lowercase": {
"type": "lowercase"
},
"edgeNGram": {
"type": "edgeNGram",
"min_gram": 2,
"max_gram": 15,
"token_chars": ["letter", "digit"]
}
}
}
},
"mappings": {
"test": {
"_all": {
"analyzer": "standardWithEdgeNGram"
},
"properties": {
"Name": {
"type": "string",
"analyzer": "standardWithEdgeNGram"
}
}
}
}
}

そして、私はそれに以下のデータを投稿しました:

POST /tests/test
{
"Name": "JACKSON v. FRENKEL"
}

そして、これが私の質問です。

GET /tests/test/_search
{
"query": {
"match": {
"Name": "jax"
}
}
}

そして私はこの結果を得ました:

{
"took": 2,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"failed": 0
},
"hits": {
"total": 1,
"max_score": 0.19178301,
"hits": [
{
"_index": "tests",
"_type": "test",
"_id": "lfOxb_5bS86_CMumo_ZLoA",
"_score": 0.19178301,
"_source": {
"Name": "JACKSON v. FRENKEL"
}
}
]
}
}

「名前」のどこにも「jax」はなく、それでも一致することを誰かが私に説明できますか?

前もって感謝します

回答:

回答№1は4

A match queryは与えられた値に対して分析を実行します。デフォルトでは、 "jax" で分析されています standardWithEdgeNGramこれには、n-gramによる解析が含まれます。 ["ja", "ax"]最初のものは "ja" 分析から "JACKSON v. FRENKEL".

この動作が望ましくない場合は、別のアナライザを指定してください。 match、を使用して analyzer たとえば、フィールド keyword

GET /tests/test/_search
{
"query": {
"match": {
"Name": "jax",
"analyzer" : "keyword"
}
}
}

回答№2の場合は1

ES 1.3.2では、以下のクエリでエラーが発生しました

GET /tests/test/_search
{
"query": {
"match": {
"Name": "jax",
"analyzer" : "keyword"
}
}
}

Error:直接のフィールド名を使用して単純化された形式でクエリを解析しましたが、フィールド名だけでなくオプションも多く含まれています。 ]] ステータス:400

私は問題を次のように修正しました 以下

{
"query": {
"query_string": {
"fields": [
"Name"
],
"query": "jax",
"analyzer": "simple"
}
}
}