私は読んでElasticSearch
いて、次のことを行う方法についての答えを見つけることができませんでした:
たとえば、タイトルに「study」というレコードがあり、ユーザーが「study」ではなく「studying」という単語を使用しているとします。これに合わせてどのように設定しElasticSearch
ますか?
ありがとう、アレックス
ps: 重複していたらすみません。何を検索すればよいかわかりませんでした。
私は読んでElasticSearch
いて、次のことを行う方法についての答えを見つけることができませんでした:
たとえば、タイトルに「study」というレコードがあり、ユーザーが「study」ではなく「studying」という単語を使用しているとします。これに合わせてどのように設定しElasticSearch
ますか?
ありがとう、アレックス
ps: 重複していたらすみません。何を検索すればよいかわかりませんでした。
これに興味があるかもしれません: http://www.elasticsearch.org/guide/reference/query-dsl/flt-query/
例: 私は書籍のタイトルにインデックスを付けており、このクエリでは:
{
"query": {
"bool": {
"must": [
{
"fuzzy": {
"book": {
"value": "ringing",
"min_similarity": "0.3"
}
}
}
]
}
}
}
私は得た
{
"took" : "1",
"timed_out" : "false",
"_shards" : {
"total" : "5",
"successful" : "5",
"failed" : "0"
}
"hits" : {
"total" : "1",
"max_score" : "0.19178301",
"hits" : [
{
"_index" : "library",
"_type" : "book",
"_id" : "3",
"_score" : "0.19178301",
"_source" : {
"book" : "The Lord of the Rings",
"author" : "J R R Tolkein"
}
}
]
}
}
これが唯一の正しい結果です..
ドキュメントにステミングを適用して、インデックスを作成するときにstudying
インデックス作成の下にいるようにすることができますstudy
。クエリを実行するときも同じことを行うので、studying
もう一度を検索すると、 を検索しstudy
、 と の両方を探して一致するものを見つけることができstudy
ますstudying
。
ステミングはもちろん言語に依存し、さまざまな手法があります。英語のスノーボールは問題ありません。何が起こるかというと、データにインデックスを付けるときに一部の情報が失われるということです。これは、ご覧のとおり、勉強と勉強を実際に区別することができなくなったためです。その区別を維持したい場合は、multi_fieldを使用して同じテキストに異なる方法でインデックスを付け、異なるテキスト分析を適用することができます。そうすれば、ステムなしバージョンとステム付きバージョンの両方の複数のフィールドを検索でき、おそらくそれらに異なる重みを付けることができます。