我正在尝试在match
中实施Elasticsearch搜索,我注意到行为不同,具体取决于我使用_all
还是输入特定的字符串值作为我的查询的字段名称。
为了给出一些上下文,我使用以下设置创建了一个索引:
{
"settings": {
"analysis": {
"analyzer": {
"default": {
"type": "custom",
"tokenizer": "standard",
"filter": [
"standard",
"lowercase",
"stop",
"kstem",
"word_delimiter"
]
}
}
}
}
}
如果我创建的文档如下:
{
"name": "Hello.World"
}
我使用_all
执行搜索,如:
curl -d '{"query": { "match" : { "_all" : "hello" } }}' http://localhost:9200/myindex/mytype/_search
正确匹配文档(因为我使用stop
过滤器来分割点上的单词),但如果我改为执行此查询:
curl -d '{"query": { "match" : { "name" : "hello" } }}' http://localhost:9200/myindex/mytype/_search
没有返回任何内容。这怎么可能?
答案 0 :(得分:1)
为/myindex/mytype/_mapping
发出GET,并查看您的索引是否按您认为的方式配置。这意味着,例如,查看“名称”字段是否为not_analyzed
。
更多信息,运行以下查询以查看name
字段的实际索引方式:
{
"query": {
"match": {
"name": "hello"
}
},
"fielddata_fields": ["name"]
}
你应该在结果中看到类似的东西:
"fields": {
"name": [
"hello",
"world"
]
}
如果您不这样做,那么您知道name
字段的映射存在问题。