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

2024-02-11

我正在使用 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”?

如何根据分析器进行部分搜索?

非常感谢。


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"
            }
        }
    }
}

Mapping

"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"
    }
}

Querying

"query": {
    "match": {
        "domain": "ing.com"
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 ElasticSearch 中使用分析器进行部分搜索 的相关文章

随机推荐