我正在尝试设置Elasticsearch,创建索引,添加了一些记录,但无法使其返回带有单词形式的结果(例如:当我搜索“dream”时,带有子字符串“dreams”的记录)。
我的记录看起来像这样(索引“myindex / movies”):
{
"id": 1,
"title": "What Dreams May Come",
... other fields
}
我尝试使用的配置:
{
"settings": {
"analysis": {
"analyzer": {
"stem": {
"tokenizer": "standard",
"filter": [
"standard",
"lowercase",
"stop",
"porter_stem"
]
}
}
}
},
"mappings": {
"movies": {
"dynamic": true,
"properties": {
"title": {
"type": "string",
"analyzer": "stem"
}
}
}
}
}
查询看起来像这样:
{
"query": {
"query_string": {
"query": "Dream"
}
}
}
我可以使用单词“dreams”获得结果,但不能使用“dream”。
我做错了吗? 我应该先以某种方式安装porter_stem吗?
答案 0 :(得分:2)
你没有做错任何事,只是你在错误的领域进行搜索。 query_string,默认情况下在_all上进行搜索。并且_all拥有自己的分析仪。 因此,您需要将相同的分析器应用于_all或将查询指向标题字段,如下所示 -
{
"query": {
"query_string": {
"query": "dream",
"default_field": "title"
}
}
}