23

私はElasticSearchを初めて使用し、現在その機能を調査しています。私が興味を持っているものの1つは、Fuzzy Queryです。これは、テストしていて、使用するのに問題があります。これはおそらくダミーの質問なので、すでにこの機能を使用している人ならすぐに答えが見つかると思います。少なくとも私は願っています。:)

ところで、 ElasticSearchだけでなく、 Luceneに直接関係しているのではないかと感じています。

まず、「first index」という名前の新しいインデックスから始めましょう。このインデックスには、値が「americanfootball」のオブジェクト「label」が格納されています。これは私が使用するクエリです。

bash-3.2$ curl -XPOST 'http://localhost:9200/firstindex/node/?pretty=true' -d '{
  "node" : {
    "label" : "american football"
  }
}
'

これが私が得た結果です。

{
  "ok" : true,
  "_index" : "firstindex",
  "_type" : "node",
  "_id" : "6TXNrLSESYepXPpFWjpl1A",
  "_version" : 1
}

これまでのところ、ファジークエリを使用してこのエントリを検索したいと思います。これは私が送るものです:

bash-3.2$ curl -XGET 'http://localhost:9200/firstindex/node/_search?pretty=true' -d '{
  "query" : {
    "fuzzy" : {
      "label" : {
        "value" : "american football",
        "boost" : 1.0,
        "min_similarity" : 0.0,
        "prefix_length" : 0
      }                       
    }    
   }   
}
'

そしてこれが私が得た結果です

{
  "took" : 15,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "failed" : 0
  },
  "hits" : {
    "total" : 0,
    "max_score" : null,
    "hits" : [ ]
  }
}

ご覧のとおり、ヒットはありません。しかし、今、クエリの値を「アメリカンフットボール」から「アメリカンフットボール」に少し縮小すると、次のようになります。

bash-3.2$ curl -XGET 'http://localhost:9200/firstindex/node/_search?pretty=true' -d ' {
  "query" : {
    "fuzzy" : {
      "label" : {
        "value" : "american footb",
        "boost" : 1.0,
        "min_similarity" : 0.0,
        "prefix_length" : 0
      }
    }
  }
}
'

次に、エントリで正しいヒットを取得します。したがって、結果は次のようになります。

{
  "took" : 0,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "failed" : 0
  },
  "hits" : {
    "total" : 1,
    "max_score" : 0.19178301,
    "hits" : [ {
      "_index" : "firstindex",
      "_type" : "node",
      "_id" : "6TXNrLSESYepXPpFWjpl1A",
      "_score" : 0.19178301, "_source" : {
        "node" : {
          "label" : "american football"
        }
      }
    } ]
  }
}

したがって、このテストに関連するいくつかの質問があります。

  1. 値を使用してクエリを実行しても結果が得られなかった理由は、私の唯一のエントリ「アメリカンフットボール」と完全に同じです。

  2. それは私が複数の単語の価値を持っているという事実に関連していますか?

  3. クエリ結果の「類似性」スコアを取得して、ファジークエリの適切なしきい値を見つける方法をよりよく理解できるようにする方法はありますか?

  4. ElasticSearch Webサイトにファジークエリ専用のページがありますが、ファジークエリに使用できるすべての潜在的なパラメーターがリストされているかどうかはわかりません。そのような網羅的なリストを見つけることができましたか?

  5. 実際に他のクエリについても同じ質問です。

  6. あいまい一致を取得するためにlucene構文を使用するあいまいクエリクエリ文字列クエリの間に違いはありますか?

4

1 に答える 1

49

1.

あいまいクエリは用語で動作します。テキストを分析しないため、フレーズを処理できません。したがって、あなたの例では、elasticsearch は「アメリカン フットボール」という用語をアメリカン フットボールという用語と一致させようとします。用語間の一致は、類似性スコアの計算に使用されるレーベンシュタイン距離に基づいています。. min_similarity=0.0 であるため、編集距離が最小の用語のサイズよりも小さい限り、任意の用語が任意の用語と一致する必要があります。あなたの場合、用語「アメリカン フットボール」のサイズは 17 で、用語「アメリカン」のサイズは 8 です。これら 2 つの用語の間の距離は 9 で、最小の用語のサイズ 8 よりも大きくなっています。用語が拒否されています。"american footb" と "american" の間の編集距離は 6 です。これは、基本的に "american" という用語の最後に 6 が追加されたものです。だからこそ結果を出す。min_similarity=0.0 の場合、編集距離が 7 以下のほとんどすべてが一致します。たとえば、「aqqqqqq」で検索しても結果が得られます。

2.

はい、上で説明したように、複数単語の値に多少関連しています。複数の用語を検索する場合は、Fuzzy Like This QueryとText Query の fuzziness パラメータを参照してください。

4 & 5.

通常、elasticsearch.org の次に適切な情報源は、elasticsearch のソース コードです。

于 2012-04-28T02:16:37.837 に答える