0

我真的以为我有这个工作,但我实际上遇到了问题。我设置了一个动态模板来匹配嵌套文档。我像这样设置我的映射:

curl -XPUT 'http://localhost:9200/test/' -d '{
    "mappings": {
        "Item": {
            "dynamic_templates": [
                {
                    "metadata_template": {
                        "match_mapping_type": "string",
                        "path_match": "metadata.*",
                        "mapping": {
                            "type": "multi_field",
                            "fields": {
                                "{name}": {
                                    "type": "{dynamic_type}",
                                    "index": "analyzed"
                                },
                                "standard": {
                                    "type": "{dynamic_type}",
                                    "index": "analyzed",
                                    "analyzer" : "standard"
                                }
                            }
                        }
                    }
                }
            ]
        }
    },
    "settings": {
        "analysis": {
            "filter": {
                "my_ngram": {
                    "max_gram": 10,
                    "min_gram": 1,
                    "type": "nGram"
                },
                "lb_stemmer": {
                    "type": "stemmer",
                    "name": "english"
                }
            },
            "analyzer": {
                "default_index": {
                    "filter": [
                        "standard",
                        "lowercase",
                        "asciifolding",
                        "my_ngram"
                    ],
                    "type": "custom",
                    "tokenizer": "keyword"
                },
                "default_search": {
                    "filter": [
                        "standard",
                        "lowercase"
                    ],
                    "type": "custom",
                    "tokenizer": "standard"
                }
            }
        }
    }
}'

我的期望是所有以“元数据”开头的字段。应存储在已分析字段和未分析字段中,后缀为“.standard”。我完全误解了这一点吗?

我添加一个项目:

curl -XPUT localhost:9200/test/Item/1 -d '{
                           "name" : "test", 
                           "metadata" : {
                                "strange_tag" : "CLEAN_2C_abcdefghij_07MAY2005_AB" 
                                }
                            }'

此查询效果很好:

{
    "query": {
        "match": {
            "metadata.strange_tag": {
                "query": "CLEAN_2C_abcdefghij_07MAY2005_AB",
                "type": "boolean"
            }
        }
    }
}

但是搜索 CLEAN 或 clean 一词不会返回任何结果。我希望该字段已通过 ngram 标记器。有人对我做错了什么有建议吗?

4

1 回答 1

1

看起来我错误地创建了我的 NGRAM 分析器。这是一个工作示例:

curl -XDELETE 'localhost:9200/test'

    curl -XPUT 'localhost:9200/test' -d '{
    "settings": {
        "analysis": {
            "analyzer": {
                "my_ngram_analyzer": {
                    "tokenizer": "my_ngram_tokenizer",
                    "filter": [
                        "standard",
                        "lowercase",
                        "asciifolding"
                    ]
                }
            },
            "tokenizer": {
                "my_ngram_tokenizer": {
                    "type": "nGram",
                    "min_gram": "2",
                    "max_gram": "3",
                    "token_chars": [
                        "letter",
                        "digit"
                    ]
                }
            }
        }
    },
    "mappings": {
        "Item": {
            "dynamic_templates": [
                {
                    "metadata_template": {
                        "match_mapping_type": "string",
                        "path_match": "*",
                        "mapping": {
                            "type": "multi_field",
                            "fields": {
                                "{name}": {
                                    "type": "{dynamic_type}",
                                    "index": "analyzed",
                                    "analyzer" : "my_ngram_analyzer"
                                },
                                "standard": {
                                    "type": "{dynamic_type}",
                                    "index": "analyzed",
                                    "analyzer": "standard"
                                }
                            }
                        }
                    }
                }
            ]
        }
    }
}'
于 2013-09-09T14:57:15.463 回答