ElasticSeachクエリを正確にして、結果をより適切に区別するにはどうすればよいですか?

ピエール

ここでの私の課題は、オートコンプリートフィールド(djangoとES)を作成することです。このフィールドでは、「apeni」、「rua apen」、または「roa apen」を検索し、メイン(または一意)オプションとして「ruaapeninos」を取得できます。ESで提案と完了をすでに試しましたが、どちらもプレフィックスを使用しています(「apen」では機能しません)。ワイルドカードも試しましたが、ファジーを使用できませんでした(「roaapeni」または「apini」では機能しません)。だから、今私はファジーとの試合をしている。

ただし、「rua ape」や「ruaapot」のようにクエリ用語が異なる場合でも、street_descが「ruaapeninos」と「ruaapotribu」に等しく、両方ともスコアが1.0の同じ2つのドキュメントが返されます。

クエリ:

{
   "aggs":{
      "addresses":{
         "filters":{
            "filters":{
               "street":{
                  "match":{
                     "street_desc":{
                        "query":"rua ape",
                        "fuzziness":"AUTO",
                        "prefix_length":0,
                        "max_expansions":50
                     }
                  }
               }
            }
         },
         "aggs":{
            "street_bucket":{
               "significant_terms":{
                  "field":"street_desc.raw",
                  "size":3
               }
            }
         }
      }
   },
   "sort":[
      {
         "_score":{
            "order":"desc"
         }
      }
   ]
}

インデックス:

{
   "catalogs":{
      "mappings":{
         "properties":{
            "street_desc":{
               "type":"text",
               "fields":{
                  "raw":{
                     "type":"keyword"
                  }
               },
               "analyzer":"suggest_analyzer"
            }
         }
      }
   }
}

アナライザー:(python)

suggest_analyzer = analyzer(
    'suggest_analyzer',
    tokenizer=tokenizer("lowercase"),
    filter=[token_filter('stopbr', 'stop', stopwords="_brazilian_")],
    language="brazilian",
    char_filter=["html_strip"]
)
Elasticsearch忍者

与えられたすべての検索用語でテストした、エンドツーエンドの作業例を追加します。

インデックスマッピング

{
  "settings": {
    "analysis": {
      "filter": {
        "autocomplete_filter": {
          "type": "edge_ngram",
          "min_gram": 1,
          "max_gram": 10
        }
      },
      "analyzer": {
        "autocomplete": { 
          "type": "custom",
          "tokenizer": "standard",
          "filter": [
            "lowercase",
            "autocomplete_filter"
          ]
        }
      }
    }
  },
  "mappings": {
    "properties": {
      "title": {
        "type": "text",
        "analyzer": "autocomplete", 
        "search_analyzer": "standard" 
      }
    }
  }
}

インデックスサンプルドキュメント

{
   "title" : "rua apotribu"
}

{
   "title" : "rua apeninos"
}

検索クエリ

{
    "query": {
        "match": {
            "title": {
                "query": "apeni", // 
                "fuzziness":"AUTO"
            }
        }
    }
}

そして検索結果

  "hits": [
            {
                "_index": "64881760",
                "_type": "_doc",
                "_id": "1",
                "_score": 1.1026623,
                "_source": {
                    "title": "rua apeninos"
                }
            }
        ]

apenでは検索結果も表示されます

 "hits": [
            {
                "_index": "64881760",
                "_type": "_doc",
                "_id": "1",
                "_score": 2.517861,
                "_source": {
                    "title": "rua apeninos"
                }
            }
        ]

そして、クエリ用語がのようrua apot異なる場合rua apotribu以下の検索結果に示すように、スコアがはるかに高い両方のドキュメントが表示されます。

 "hits": [
            {
                "_index": "64881760",
                "_type": "_doc",
                "_id": "2",
                "_score": 2.9289336,
                "_source": {
                    "title": "rua apotribu"
                }
            },
            {
                "_index": "64881760",
                "_type": "_doc",
                "_id": "1",
                "_score": 0.41107285,
                "_source": {
                    "title": "rua apeninos"
                }
            }
        ]

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

結果出力を繰り返したクエリにコンマ区切りを付けるにはどうすればよいですか?

分類Dev

SQLクエリから正確な結果を取得するにはどうすればよいですか?

分類Dev

正しい結果をサブクエリするにはどうすればよいですか

分類Dev

MySQLクエリの結果を取得してcxGridに表示するにはどうすればよいですか?

分類Dev

ジェネリックと継承を適切に混合して、望ましい結果を得るにはどうすればよいですか?

分類Dev

PDOでクエリ結果を配列として取得するにはどうすればよいですか?

分類Dev

クエリ結果をMYSQLの別の値に変更するにはどうすればよいですか?

分類Dev

クエリを拡張して結果を別のテーブルに結合するにはどうすればよいですか?

分類Dev

このSQLServerクエリをより正確に編集するにはどうすればよいですか?

分類Dev

SQLで複雑な結合ステートメントの結果を適切にクエリするにはどうすればよいですか?

分類Dev

SQL クエリがエラーなしで適切に実行されたかどうかを確認するにはどうすればよいですか?

分類Dev

サブクエリの結果を取得して別のテーブルに結合するにはどうすればよいですか?

分類Dev

PowerShellで `ls`の結果を文字区切りの文字列として結合するにはどうすればよいですか?

分類Dev

1つのmysqlクエリの結果を使用して、phpの別のクエリで使用するにはどうすればよいですか?

分類Dev

ハッシュに対してクエリを実行し、別のハッシュの結果を取得するにはどうすればよいですか?

分類Dev

クエリ結果を別のクエリの列として使用するにはどうすればよいですか?

分類Dev

SQLクエリの結果を別のクエリの列として使用するにはどうすればよいですか?

分類Dev

区切りリストを展開するクエリを最適化するにはどうすればよいですか?

分類Dev

別のリクエストを送信して、スクレイプ解析関数で結果を取得するにはどうすればよいですか?

分類Dev

MySQLクエリ結果を特定の結果に制限するにはどうすればよいですか?

分類Dev

解析クエリを区別して、相互に影響を与えないようにするにはどうすればよいですか?

分類Dev

クエリ結果でサブクエリを使用してから、各行の計算結果でORDER BYするにはどうすればよいですか?

分類Dev

クエリを別のクエリで正しくCFLoopするにはどうすればよいですか?

分類Dev

Swiftの新しい結果型でジェネリック型を適切に使用するにはどうすればよいですか?

分類Dev

別のSELECTの結果に基づいて何かをSELECTするクエリを作成するにはどうすればよいですか?

分類Dev

spを使用して2つの選択クエリ結果を1つの結果に結合するにはどうすればよいですか?

分類Dev

スクリプトを使用してレーンを正確に切り替えるにはどうすればよいですか?

分類Dev

phpとmysqlを使用したクエリによって実行されたクエリ結果を更新するにはどうすればよいですか?

分類Dev

別のクエリ結果セットに基づいてMySQLiクエリを実行するにはどうすればよいですか?

Related 関連記事

  1. 1

    結果出力を繰り返したクエリにコンマ区切りを付けるにはどうすればよいですか?

  2. 2

    SQLクエリから正確な結果を取得するにはどうすればよいですか?

  3. 3

    正しい結果をサブクエリするにはどうすればよいですか

  4. 4

    MySQLクエリの結果を取得してcxGridに表示するにはどうすればよいですか?

  5. 5

    ジェネリックと継承を適切に混合して、望ましい結果を得るにはどうすればよいですか?

  6. 6

    PDOでクエリ結果を配列として取得するにはどうすればよいですか?

  7. 7

    クエリ結果をMYSQLの別の値に変更するにはどうすればよいですか?

  8. 8

    クエリを拡張して結果を別のテーブルに結合するにはどうすればよいですか?

  9. 9

    このSQLServerクエリをより正確に編集するにはどうすればよいですか?

  10. 10

    SQLで複雑な結合ステートメントの結果を適切にクエリするにはどうすればよいですか?

  11. 11

    SQL クエリがエラーなしで適切に実行されたかどうかを確認するにはどうすればよいですか?

  12. 12

    サブクエリの結果を取得して別のテーブルに結合するにはどうすればよいですか?

  13. 13

    PowerShellで `ls`の結果を文字区切りの文字列として結合するにはどうすればよいですか?

  14. 14

    1つのmysqlクエリの結果を使用して、phpの別のクエリで使用するにはどうすればよいですか?

  15. 15

    ハッシュに対してクエリを実行し、別のハッシュの結果を取得するにはどうすればよいですか?

  16. 16

    クエリ結果を別のクエリの列として使用するにはどうすればよいですか?

  17. 17

    SQLクエリの結果を別のクエリの列として使用するにはどうすればよいですか?

  18. 18

    区切りリストを展開するクエリを最適化するにはどうすればよいですか?

  19. 19

    別のリクエストを送信して、スクレイプ解析関数で結果を取得するにはどうすればよいですか?

  20. 20

    MySQLクエリ結果を特定の結果に制限するにはどうすればよいですか?

  21. 21

    解析クエリを区別して、相互に影響を与えないようにするにはどうすればよいですか?

  22. 22

    クエリ結果でサブクエリを使用してから、各行の計算結果でORDER BYするにはどうすればよいですか?

  23. 23

    クエリを別のクエリで正しくCFLoopするにはどうすればよいですか?

  24. 24

    Swiftの新しい結果型でジェネリック型を適切に使用するにはどうすればよいですか?

  25. 25

    別のSELECTの結果に基づいて何かをSELECTするクエリを作成するにはどうすればよいですか?

  26. 26

    spを使用して2つの選択クエリ結果を1つの結果に結合するにはどうすればよいですか?

  27. 27

    スクリプトを使用してレーンを正確に切り替えるにはどうすればよいですか?

  28. 28

    phpとmysqlを使用したクエリによって実行されたクエリ結果を更新するにはどうすればよいですか?

  29. 29

    別のクエリ結果セットに基づいてMySQLiクエリを実行するにはどうすればよいですか?

ホットタグ

アーカイブ