ここでの私の課題は、オートコンプリートフィールド(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"]
)
与えられたすべての検索用語でテストした、エンドツーエンドの作業例を追加します。
インデックスマッピング
{
"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]
コメントを追加