我已阅读了一些文章和建议,但不幸的是我没有为我找到有效的解决方案。
问题是我在索引中有一个字段,可以包含任何可能的语言内容,但我不知道它是哪种语言。我需要搜索和排序它。它不是本地化,只是不同语言的价值观。
我尝试过的第一种语言(不包括少数欧洲语言)是日语。首先,我为这个字段设置了一个分析器,并尝试仅搜索日语单词/短语。我从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
}
}
}
}
在标准分析仪的情况下,如果我找到ネバーランド,我会得到结果我会得到我想要的。但是,如果我使用自定义分析仪并尝试相同或只是一个符号,我仍然没有得到任何东西。
我正在寻找的行为是:打破单词/部分的查询字符串,所有单词/部分应该出现在结果名称字段中。
提前谢谢