3

次のように、ElasticSearch インデックスに 3 つのレコードを挿入しました。

curl -XPOST 'http://127.0.0.1:9200/geoindex_test/STREET?pretty=1'  -d '
{ "cityNames" : [ { "language" : "ENG",
    "name" : "w bridgewater",
    "raw_name" : "W BRIDGEWATER"
  },
  { "language" : "ENG",
    "name" : "west bridgewater",
    "raw_name" : "West Bridgewater"
  }
],
"id" : 1,
  "streetNames" : [ { "language" : "ENG",
    "name" : "cram rd",
    "raw_name" : "Cram Rd"
  } ]
}'

curl -XPOST 'http://127.0.0.1:9200/geoindex_test/STREET?pretty=1'  -d '
{ "cityNames" : [ { "language" : "ENG",
    "name" : "bridgewater corners",
    "raw_name" : "BRIDGEWATER CORNERS"
  },
  { "language" : "ENG",
    "name" : "bridgewater center",
    "raw_name" : "Bridgewater Center"
  }
],
"id" : 2,
"streetNames" : [ { "language" : "ENG",
    "name" : "valley view rd",
    "raw_name" : "Valley View Rd"
  } ]
}'

curl -XPOST 'http://127.0.0.1:9200/geoindex_test/STREET?pretty=1'  -d '
{ "cityNames" : [ { "language" : "ENG",
    "name" : "bridgewater",
    "raw_name" : "Bridgewater"
  },
  { "language" : "ENG",
    "name" : "windsor",
    "raw_name" : "Windsor"
  }
],
"id" : 3,
"streetNames" : [ { "language" : "ENG",
    "name" : "valley view rd",
    "raw_name" : "Valley View Rd"
  } ]
}'

そして、次のように検索を実行します。

curl -XGET 'http://127.0.0.1:9200/geoindex_test/STREET/_search?pretty=1'  -d '
{
"query" : {
    "match" : { "cityNames.name" : "bridgewater" }
}
}'

ElasticSearch は 3 番目のレコード (id == 3) を最良の一致として返すと考えていました (レコード 3 は「bridgewater」と完全に一致する唯一のレコードです) が、代わりに ID 1 (w bridgewater) のレコードを最良の一致として返します。私は何を間違っていますか?

4

1 に答える 1

1

基本的にその下のオブジェクトを検索目的で1つに折りたたむ内部オブジェクトを使用しているため、これが起こっていると思います。たとえば、オブジェクト 1 の検索フィールドをクエリする場合、["w bridgewater", "west bridgewater"] に対してクエリを実行し、ご想像のとおり個別のフィールドではありません。

「bridgewater」はオブジェクト 1 と 2 に 2 回 (2 つの名前フィールド) 表示されるのに対し、オブジェクト 3 には 1 回表示されるため、これらのアイテムは検索で上位にランク付けされます。オブジェクト 1 が最終的に選択されます。これは、「bridgewater」が表示されるフィールドがオブジェクト 2 よりも短い文字列であるためです (「w bridgewater」と「bridgewater corners」)。

あなたがやっているように内部オブジェクトを使用する代わりに、代わりにネストされたオブジェクトを使用してください http://www.elasticsearch.org/guide/reference/mapping/nested-type/。スコアモードを「最大」に設定すると、より直感的にマッチするようになります。

于 2013-05-23T07:21:20.903 に答える