我在弹性搜索方面有一些奇怪的行为。 我正在使用带有自定义标记器的自定义分析器,如果出现这种情况,它会显示单词 空间,+, - 。
我正在搜索
{
"query": {
"match_phrase_prefix": {
"name.default": {
"query": "paris oly"
}
}
}
}
我按预期得到了结果 巴黎奥林匹亚等... 但是当我在搜索时
{
"query": {
"match_phrase_prefix": {
"name.default": {
"query": "paris ol"
}
}
}
}
我根本没有得到任何结果。
设置:
"analysis": {
"analyzer": {
"customAnalyzer": {
"type": "custom",
"filter": "lowercase",
"tokenizer": "customTokenizer"
},
"tokenizer": {
"customTokenizer": {
"pattern": "[\\+\\s-]",
"type": "pattern"
}
}
}
字段映射:
{
"name": {
"properties": {
"default": {
"type": "string",
"analyzer": "customAnalyzer"
}
}
}
}
部分文档样本(请求的字段):
{
"name": {
"jp": "パリ オリンピア (劇場)",
"default": "Paris Olympia",
}
}
{
"TYPE_NAME": {
"dynamic_templates": [
{
"name": {
"path_match": "*name.*",
"match_mapping_type": "string",
"mapping": {
"type": "string",
"analyzer": "customAnalyzer"
}
}
}
],
"properties": {
"point": {
"type": "geo_point"
}
}
}
}
答案 0 :(得分:1)
当我尝试测试您发布的内容时,它对我有用。我会发布我所做的事情,你可以看看它,看看你是否能弄清楚你的设置有什么不同,如果你还有其他问题,我会尽力帮助。
我使用你发布的贴图和分析器/标记器创建了一个索引,然后添加了你发布的文档:
DELETE /test_index
PUT /test_index
{
"settings": {
"number_of_shards": 1,
"number_of_replicas": 0,
"analysis": {
"tokenizer": {
"customTokenizer": {
"pattern": "[\\+\\s-]",
"type": "pattern"
}
},
"analyzer": {
"customAnalyzer": {
"type": "custom",
"filter": "lowercase",
"tokenizer": "customTokenizer"
}
}
}
},
"mappings": {
"doc": {
"properties": {
"name": {
"properties": {
"default": {
"type": "string",
"analyzer": "customAnalyzer"
}
}
}
}
}
}
}
PUT /test_index/doc/1
{
"name": {
"jp": "パリ オリンピア (劇場)",
"default": "Paris Olympia"
}
}
然后,您发布的任何一个查询都会为我返回文档:
POST /test_index/_search
{
"query": {
"match_phrase_prefix": {
"name.default": {
"query": "paris oly"
}
}
}
}
...
{
"took": 1,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"failed": 0
},
"hits": {
"total": 1,
"max_score": 0.38356602,
"hits": [
{
"_index": "test_index",
"_type": "doc",
"_id": "1",
"_score": 0.38356602,
"_source": {
"name": {
"jp": "パリ オリンピア (劇場)",
"default": "Paris Olympia"
}
}
}
]
}
}
或
POST /test_index/_search
{
"query": {
"match_phrase_prefix": {
"name.default": {
"query": "paris ol "
}
}
}
}
...
{
"took": 1,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"failed": 0
},
"hits": {
"total": 1,
"max_score": 0.38356602,
"hits": [
{
"_index": "test_index",
"_type": "doc",
"_id": "1",
"_score": 0.38356602,
"_source": {
"name": {
"jp": "パリ オリンピア (劇場)",
"default": "Paris Olympia"
}
}
}
]
}
}
以下是我使用的代码,为方便起见:
http://sense.qbox.io/gist/4e58344580dcf01299f7cc2199d0fb7694d2a051
所以必须有其他事情发生。你能从我的尝试中说出你的设置有什么不同吗?
编辑:我确实需要切换标记器和分析器的顺序,因为否则会出现错误。所以你可能想看一下。