目次
クエリ提案の紹介
クエリの提案は何ですか?
提案をクエリして、ユーザーに優れたエクスペリエンスを提供します。主に含まれるもの:スペルチェック;クエリ単語の自動提案(自動補完)
ESで提案されたAPIをクエリする
クエリ候補では、_searchエンドポイントアドレスも使用されます。DSLの提案ノードを使用して、必要な提案クエリを定義します。
POST twitter/_search
{
"query" : {
"match": {
"message": "tring out Elasticsearch"
}
},
"suggest" : { //定义建议查询
//一个建议查询名
"my-suggestion" : {
"text" : "tring out Elasticsearch", //查询文本
"term" : { //使用词项建议器
"field" : "message" //指定在哪个字段上获取建议词
}
}
}
}
POST _search
{
"suggest": {
"my-suggest-1" : {
"text" : "tring out Elasticsearch",
"term" : {
"field" : "message"
}
},
"my-suggest-2" : {
"text" : "kmichy",
"term" : {
"field" : "user"
}
}
}
}
複数の提案されたクエリでグローバルクエリテキストを使用できます
POST _search
{
"suggest": {
"text" : "tring out Elasticsearch",
"my-suggest-1" : {
"term" : {
"field" : "message"
}
},
"my-suggest-2" : {
"term" : {
"field" : "user"
}
}
}
}
提案者紹介
用語提案者
用語提案は、入力テキストの単語セグメンテーションを実装し、各単語のファジークエリの用語提案を提供します。インデックスに存在する単語の推奨単語はデフォルトでは提供されません。存在しない単語のファジークエリ結果に従って並べ替えた後、特定の数の提案単語が選択されます。
一般的に推奨されるオプション:
テキスト |
検索テキストを指定する |
フィールド |
提案された単語の検索フィールドを取得します |
アナライザ |
指定トークナイザー |
サイズ |
単語ごとに返される提案された単語の最大数 |
ソート |
提案された単語を並べ替える方法、利用可能なオプション: スコア:最初にスコアで並べ替え、次にドキュメントの頻度と用語の順序で並べ替えます。 頻度:最初にドキュメントの頻度で並べ替え、次にスコアと用語で並べ替えます。 |
Suggest_mode |
単語を提案する方法を制御する提案モード: 欠落:提案された単語は、検索語がデフォルト値であるインデックスに存在しない場合にのみ提供されます。 人気:検索語よりもドキュメントの頻度が高い単語のみを提案します。 常に:常に一致する提案を提供します。 |
フレーズ提案者
フレーズの提案では、用語に基づいて、インデックスの元のテキストに同時に表示されるかどうか、隣接度、単語の頻度など、複数の用語間の関係が考慮されます。
POST /ftq/_search
{
"query": {
"match_all": {}
},
"suggest" : {
"myss":{
"text": "java sprin boot",
"phrase": {
"field": "title"
}
}
}
}
完了提案者の自動完了
シーンの自動完了用に設計された提案デバイス。このシナリオでは、ユーザーが文字を入力するたびに、クエリリクエストをバックエンドに送信して、一致するアイテムをすぐに見つける必要があります。ユーザーの入力速度が速い場合、バックエンドの応答速度はより要求されます。したがって、実装に関しては、前の2つのサジェスタとは異なるデータ構造を使用します。インデックスは反転によって完成されませんが、分析されたデータはFSTにエンコードされ、インデックスと一緒に保存されます。オープン状態のインデックスの場合、FSTはESによってメモリにロードされ、プレフィックス検索は非常に高速です。ただし、FSTはプレフィックス検索にのみ使用できます。これは、完了サジェスタの制限でもあります。
https://www.elastic.co/guide/en/elasticsearch/reference/current/search-suggesters-completion.html
自動補完を使用するには、補完の提案を提供するために使用されるインデックスのフィールドを特別に設計する必要があり、フィールドタイプは補完です。
PUT music
{
"mappings": {
"_doc" : {
"properties" : {
"suggest" : { //用于自动补全的字段
"type" : "completion"
},
"title" : {
"type": "keyword"
}
}
}
}
}
PUT music/_doc/1?refresh
{
"suggest" : {
"input": [ "Nevermind", "Nirvana" ],
"weight" : 34
}
}
//Input 指定输入词Weight 指定排序值(可选)
PUT music/_doc/1?refresh
{
"suggest" : [
{
"input": "Nevermind",
"weight" : 10
},
{
"input": "Nirvana",
"weight" : 3
}
]}
PUT music/_doc/1?refresh
{
"suggest" : [ "Nevermind", "Nirvana" ]
}
PUT music/_doc/2?refresh
{
"suggest" : {
"input": [ "Nevermind", "Nirvana" ],
"weight" : 20
}
}
POST music/_search?pretty
{
"suggest": {
"song-suggest" : {
"prefix" : "nir",
"completion" : {
"field" : "suggest"
}
}
}
}
POST music/_search?pretty
{
"suggest": {
"song-suggest" : {
"prefix" : "nir",
"completion" : {
"field" : "suggest",
"skip_duplicates": true //去重
}
} }}
PUT music/_doc/3?refresh
{
"suggest" : {
"input": [ "lucene solr", "lucene so cool","lucene elasticsearch" ],
"weight" : 20
}
}
//存的是短语
PUT music/_doc/4?refresh
{
"suggest" : {
"input": ["lucene solr cool","lucene elasticsearch" ],
"weight" : 10
}
}
POST music/_search?pretty
{
"suggest": {
"song-suggest" : {
"prefix" : "lucene s",
"completion" : {
"field" : "suggest" ,
"skip_duplicates": true
}
}
}
}