Elasticsearch仅从开始搜索

时间:2018-08-28 09:06:38

标签: elasticsearch

当前,Elasticsearch仅从字符串的开头而不是整个字符串中搜索映射的项目。 我有一个自定义分析器,以及一个自定义边缘ngram标记程序。 我目前正在使用JavaScript中的布尔查询来搜索索引。

索引

{
    "homestead_dev_index": {
        "aliases": {},
        "mappings": {
            "elasticprojectnode": {
                "properties": {
                    "archived": {
                        "type": "boolean"
                    },
                    "id": {
                        "type": "text",
                        "analyzer": "full_name"
                    },
                    "name": {
                        "type": "text",
                        "analyzer": "full_name"
                    }
                }
            }
        },
        "settings": {
            "index": {
                "number_of_shards": "5",
                "provided_name": "homestead_dev_index",
                "creation_date": "1535439085947",
                "analysis": {
                    "analyzer": {
                        "full_name": {
                            "filter": [
                                "standard",
                                "lowercase",
                                "asciifolding"
                            ],
                            "type": "custom",
                            "tokenizer": "mytok"
                        }
                    },
                    "tokenizer": {
                        "mytok": {
                            "type": "edge_ngram",
                            "min_gram": "3",
                            "max_gram": "10"
                        }
                    }
                },
                "number_of_replicas": "1",
                "uuid": "iCa7qKJVRU-_MA8sCYIAXw",
                "version": {
                    "created": "5060399"
                }
            }
        }
    }
}

查询正文

{
    "query": {
        "bool": {
            "should": [
                { "match": { "name": this.searchString } },
                { "match": { "id": this.searchString } }
            ]
        }
    },
    "highlight": {
        "pre_tags": ["<b style='background-color:yellow'>"],
        "post_tags": ["</b>"],
        "fields": {
            "name": {},
            "id": {}
        }
    }
}

示例
如果我有名为“ 道路-1区”,“ 道路-2区”和“ 5区-道路”的项目并且用户搜索“ Road ”时,只有“ Road-Area 1 ”和“ Road-Area 2 ”显示为“ Road ”以黄色突出显示。 该代码还需要提取最终项目。

1 个答案:

答案 0 :(得分:1)

我似乎已经知道了。 在原始描述中,当我应该使用edge_ngram令牌生成器时,我正在使用ngram令牌生成器。

发现于:https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-tokenizers.html#_partial_word_tokenizers