Elasticsearch分析器在多场上的选择

时间:2014-04-30 19:04:58

标签: elasticsearch

注意:我最初发布此here但我没有回复,所以我想我会在这里尝试。

我正在尝试根据文本的语言以三种不同的方式索引单个字段。我正在使用名为“analyzer”的字段来使用内置的“_analyzer”字段确定主子字段的分析器。我根据文档的语言在文档中设置了这个分析器。 “辅助”子字段使用“简单”分析器。第三个子字段称为“bigram”。我希望系统使用自定义的“word_bigram”分析器,如果文档的语言使用单词之间的空格,否则我希望它使用“character_bigram”分析器(例如,中文)。

添加文档时,我无法弄清楚如何为第三个字段指定分析器。我现在唯一的想法是将多字段中的二元组子字段分成两个单独的字段(见下文)。根据语言的不同,文档中只会包含其中一个。根据{{​​3}}的答案,我并不是因为这个想法而疯狂,因为这可能要求我将这个字段的内容存储3到4次。

"body_word_bigram": {
    "type": "string",
    "store": true,
    "analyzer": "word_bigram",
    "boost": 2.0
},
"body_char_bigram":{
    "type": "string",
    "store": true,
    "analyzer": "char_bigram",
    "boost": 2.0
}

我在下面列出了我的架构的相关部分。

设定:

{
    "text_document": {
        "analysis": {
            "analyzer": {
                "word_bigram": {
                    "type": "custom",
                    "tokenizer": "standard",
                    "filter": ["lowercase", "truncate_5", "word_bigram"]
                },
                "char_bigram": {
                    "type": "custom",
                    "tokenizer": "pattern",
                    "filter": ["lowercase", "char_bigram"]
                }
            },
            "filter": {
                "truncate_5": {
                    "type": "truncate",
                    "length": 5                 
                },
                "word_bigram": {
                    "type": "shingle",
                    "min_shingle_size": 2,
                    "max_shingle_size": 2,
                    "output_unigrams": false
                },
                "char_bigram": {
                    "type": "nGram",
                    "min_gram": 2,
                    "max_gram": 2
                }
            }
        }
    }
}

映射:

{
    "text_document": {
        "_analyzer": {
            "path": "analyzer"
        },
        "properties": {
            "body": {
                "type": "string",
                "store": true,
                "fields": {
                    "secondary": {
                        "type": "string",
                        "analyzer": "simple"
                    },
                    "bigram": {
                        "type": "string",
                        "analyzer": "?",
                        "boost": 2.0
                    }
                }
            },
            "analyzer": {
                "type": "string",
                "store": "true",
                "index": false
            }
        }
    }
}

0 个答案:

没有答案