一尘不染

在ElasticSearch中使用分析器进行部分搜索

elasticsearch

我正在使用Elasticsearch构建URL索引。

我将一个URL提取为3个部分,分别是“域”,“路径”和“查询”。

例如:testing.com/index.html?user=who&pw=no将分为

domain = testing.com
path = index.html
query = user=who&pw=no

当我想在索引中部分搜索域时出现问题,例如“ user = who”或“ ing.com”。

甚至在索引时没有使用“ Analyzer”时,是否可以使用“ Analyzer”?

如何基于分析仪进行部分搜索?

非常感谢你。


阅读 194

收藏
2020-06-22

共1个答案

一尘不染

2种方法:

1.通配符搜索-简单而缓慢

"query": {
    "query_string": {
        "query": "*ing.com",
        "default_field": "domain"
    }
}

2.使用nGram令牌生成器-更难但更快

索引设定

"settings" : {
    "analysis" : {
        "analyzer" : {
            "my_ngram_analyzer" : {
                "tokenizer" : "my_ngram_tokenizer"
            }
        },
        "tokenizer" : {
            "my_ngram_tokenizer" : {
                "type" : "nGram",
                "min_gram" : "1",
                "max_gram" : "50"
            }
        }
    }
}

制图

"properties": {
    "domain": {
        "type": "string",
        "index_analyzer": "my_ngram_analyzer"
    },
    "path": {
        "type": "string",
        "index_analyzer": "my_ngram_analyzer"
    },
    "query": {
        "type": "string",
        "index_analyzer": "my_ngram_analyzer"
    }
}

查询方式

"query": {
    "match": {
        "domain": "ing.com"
    }
}
2020-06-22