diadia

興味があることをやってみる。自分のメモを残しておきます。

elasticsearchで検索される英単語と検索されない英単語について

以下ではどのようにデータが格納され、どんなキーワードなら検索できるかを焦点に見る。

例:英文を格納する

エラスティックサーチにおいて英文を格納するケースでは、英文は文章中のスペース(white space)に基づいて単語に分割するとある。
したがってスペースで区切られた単語は検索できる様になるが、スペースがないものに関しては検索できないと結論付けられる。 これを確かめる。

// 格納するインデックスを作成する
// インデックス作成と同時に明示的にMappingを作成
PUT sample
{ 
  "mappings":{
    "properties": {
      "content":{
          "type":"text"
        }
    }
  }
}
// データ(ドキュメント)を格納する
// 以下の場合、単語として"I", "have", "two", "dogs", "you", "threecats"がスペースに基づき単語とみなされる。

PUT sample/_doc/1
{
  "content": "I have two dogs. you have threecats."
}
// 検索は以下のように行う
// contentの値に探したいキーワード(単語)を書く

GET sample/_search
{
  "query":{
    "match":{
      "content":"dogs"
    }
  }
}

// 結果はI, have, two, dogs, you, threecatsでは検索したら検索結果がありとなる。
// 一方で"dog", "cats","three"では検索結果は無しとなる。

スペースで区切られた単語は検索できるが、スペースがないものに関しては検索できないと結論付けられる。 スペースで区切られた文字列をelasticsearchでは単語とみなす。そしてその単語は検索された時に備えて、単語と検索対象(ドキュメント)を保存される。