弹性搜索多语言字段

时间:2015-07-07 14:26:13

标签: elasticsearch multilingual

我已阅读了一些文章和建议,但不幸的是我没有为我找到有效的解决方案。

问题是我在索引中有一个字段,可以包含任何可能的语言内容,但我不知道它是哪种语言。我需要搜索和排序它。它不是本地化,只是不同语言的价值观。

我尝试过的第一种语言(不包括少数欧洲语言)是日语。首先,我为这个字段设置了一个分析器,并尝试仅搜索日语单词/短语。我从here举了示例。以下是我用于此的内容:

overflow: visible

映射器:

'analysis': {
    "filter": {
    ...
        "ja_pos_filter": {
            "type": "kuromoji_part_of_speech",
            "stoptags": [
                "\\u52a9\\u8a5e-\\u683c\\u52a9\\u8a5e-\\u4e00\\u822c",
                "\\u52a9\\u8a5e-\\u7d42\\u52a9\\u8a5e"]
        },
    ...
    },
    "analyzer": {
    ...
        "ja_analyzer": {
            "type": "custom",
            "filter": ["kuromoji_baseform", "ja_pos_filter", "icu_normalizer", "icu_folding", "cjk_width"],
            "tokenizer": "kuromoji_tokenizer"
        },
    ...
    },
    "tokenizer": {
        "kuromoji": {
            "type": "kuromoji_tokenizer",
            "mode": "search"
        }
    }
}

这里几乎没有尝试从中得到结果:

'name': {
    'type': 'string',
    'index': 'analyzed',
    'analyzer': 'ja_analyzer',
}

它们都不起作用。

如果我只是拿一个标准的分析器并使用query_string或者自己查询制作短语(打破空白,我没有这里)并使用通配符*<> *为此它再也找不到我了。分析员说ネバーランド和福岛是单独的词/部分:

{
    'filter': {
        'query': {
            'bool': {
                'must': [
                    {
                        # 'wildcard': {'name': u'*ネバーランド福島*'}
                        # 'match': {'name": u'ネバーランド福島'
                        # },
                        "query_string": {
                            "fields": ['name'],
                            "query": u'ネバーランド福島',
                            "default_operator": 'AND'
                        }
                    },
                ],
                'boost': 1.0
            }
        }
    }
}

在标准分析仪的情况下,如果我找到ネバーランド,我会得到结果我会得到我想要的。但是,如果我使用自定义分析仪并尝试相同或只是一个符号,我仍然没有得到任何东西。

我正在寻找的行为是:打破单词/部分的查询字符串,所有单词/部分应该出现在结果名称字段中。

提前谢谢

0 个答案:

没有答案