0

複数の単語を含むフレーズからオートコンプリート機能を実装しようとしています。

単語の先頭 (edgeNGram?) のみを照合できるようにしたいのですが、検索されたすべての単語に対してです。

たとえば、「monitor」を検索すると、monitor という単語が含まれるすべてのフレーズを受け取る必要がありますが、「onitor」を検索すると、一致するものは得られません (以下のデータセットから)。また、「mon ap」を検索すると、たとえば「APNEA MONITOR-SCHULTE Vital Signs Monitor」が表示され、「mon rrr」では結果が返されないはずです。

だから私の質問は、それを実装するにはどうすればよいですか?

つまり、一致するフレーズには、検索された用語で始まる単語が含まれている必要があります。

これが私のマッピングです:

{
    "quicksearch2" : {
        "results" : {
            "properties" : {       
                "phrase" : {
                    "type" : "string",
                    "index_analyzer" : "quicksearch_index_analyzer",
                    "search_analyzer" : "quicksearch_search_analyzer"
                }        
            }
        }
    }
}

そして、ここに私の設定があります:

{
    "quicksearch2" : {
        "settings" : {
            "index.analysis.analyzer.quicksearch_index_analyzer.filter.4" : "left_ngram",
            "index.analysis.analyzer.quicksearch_search_analyzer.filter.3" : "unique",
            "index.analysis.analyzer.quicksearch_index_analyzer.filter.3" : "unique",
            "index.analysis.filter.left_ngram.max_gram" : "20",
            "index.analysis.analyzer.quicksearch_search_analyzer.filter.2" : "asciifolding",
            "index.analysis.analyzer.quicksearch_search_analyzer.tokenizer" : "keyword",
            "index.analysis.analyzer.quicksearch_search_analyzer.filter.1" : "lowercase",
            "index.number_of_replicas" : "0",
            "index.analysis.analyzer.quicksearch_search_analyzer.filter.0" : "trim",
            "index.analysis.filter.left_ngram.type" : "edgeNGram",
            "index.analysis.analyzer.quicksearch_search_analyzer.type" : "custom",
            "index.analysis.analyzer.quicksearch_index_analyzer.filter.0" : "trim",
            "index.analysis.analyzer.quicksearch_index_analyzer.filter.2" : "asciifolding",
            "index.analysis.analyzer.quicksearch_index_analyzer.filter.1" : "lowercase",
            "index.analysis.analyzer.quicksearch_index_analyzer.type" : "custom",
            "index.analysis.filter.left_ngram.side" : "front",
            "index.analysis.analyzer.quicksearch_index_analyzer.tokenizer" : "keyword",
            "index.number_of_shards" : "1",
            "index.version.created" : "900899",
            "index.uuid" : "Lb7vC-eHQB-u_Okm3ERLow"
        }
    }
}

これが私のクエリです:

query: {
    match: {
        phrase: {
            query: term,
            operator: 'and'
        }
}

いくつかのサンプルデータ:

{
    "took" : 133,
    "timed_out" : false,
    "_shards" : {
        "total" : 1,
        "successful" : 1,
        "failed" : 0
    },
    "hits" : {
        "total" : 6197,
        "max_score" : 1.491863,
        "hits" : [ {
            "_index" : "quicksearch2",
            "_type" : "results",
            "_id" : "emCydgTfQwuKkl4sSZoosQ",
            "_score" : 1.491863,
            "fields" : {
                "phrase" : "APNEA MONITOR- SCHULTE Apnea Monitor"
            }
        }, {
            "_index" : "quicksearch2",
            "_type" : "results",
            "_id" : "AXCO5rUxRwC9SebXcQxXeQ",
            "_score" : 1.491863,
            "fields" : {
                "phrase" : "APNEA MONITOR- SCHULTE Apnea Monitor, Neonatal"
            }
        }, {
            "_index" : "quicksearch2",
            "_type" : "results",
            "_id" : "tjJq3klPTsmP8akOc18Htw",
            "_score" : 1.491863,
            "fields" : {
                "phrase" : "APNEA MONITOR- SCHULTE Apnea Monitor, Recording"
            }
        }, {
            "_index" : "quicksearch2",
            "_type" : "results",
            "_id" : "-FjKWxl9Rm6-byn-wlpoIw",
            "_score" : 1.491863,
            "fields" : {
                "phrase" : "APNEA MONITOR- SCHULTE Cardiorespiratory Monitor"
            }
        }, {
            "_index" : "quicksearch2",
            "_type" : "results",
            "_id" : "Q19k6V6VQ6ulZOLCfESQ6w",
            "_score" : 1.491863,
            "fields" : {
                "phrase" : "APNEA MONITOR- SCHULTE Impedance Pneumograph Bedside Monitor"
            }
        }, {
            "_index" : "quicksearch2",
            "_type" : "results",
            "_id" : "YLI1er3cRjSyGumWNVi0pg",
            "_score" : 1.491863,
            "fields" : {
                "phrase" : "APNEA MONITOR- SCHULTE Impedance Pneumograph Monitor"
            }
        }, {
            "_index" : "quicksearch2",
            "_type" : "results",
            "_id" : "n5j1SaXeS2W6NymaYAYD6A",
            "_score" : 1.491863,
            "fields" : {
                "phrase" : "APNEA MONITOR- SCHULTE Neonatal Monitor"
            }
        }, {
            "_index" : "quicksearch2",
            "_type" : "results",
            "_id" : "U7Q5XrrHRbKOIwfRWO6RTQ",
            "_score" : 1.491863,
            "fields" : {
                "phrase" : "APNEA MONITOR- SCHULTE Pulmonary Function Monitor"
            }
        }, {
            "_index" : "quicksearch2",
            "_type" : "results",
            "_id" : "aF_THiCKRIyzunCbBxJTEg",
            "_score" : 1.491863,
            "fields" : {
                "phrase" : "APNEA MONITOR- SCHULTE Vital Signs Monitor"
            }
        }, {
            "_index" : "quicksearch2",
            "_type" : "results",
            "_id" : "8BAjZfwMQjWmrkqCO7o6gg",
            "_score" : 1.491863,
            "fields" : {
                "phrase" : "P.P.M. - PORTABLE PRECISION MONITOR Gas Monitor, Atmospheric"
            }
        } ]
    }
}
4

2 に答える 2