我在ElasticSearch中有一个索引,其中包含以下映射:
mappings: {
feed: {
properties: {
html_url: {
index: not_analyzed
omit_norms: true
index_options: docs
type: string
}
title: {
index_options: offsets
type: string
}
created: {
store: true
format: yyyy-MM-dd HH:mm:ss
type: date
}
description: {
type: string
}
}
}
执行短语搜索时出现以下错误(“视频游戏”):
IllegalStateException [field \“title \”索引没有位置数据;无法运行PhraseQuery(term = video)];
单字搜索工作正常 . 尝试了“index_options:position”,但没有运气 . Headers 字段包含多种语言的文本,有时为空 . 有趣的是,它似乎随机失败,例如,它将使用相同的数据集失败200K文档或800K . 是否有一些理由不会将某些头衔编入索引?
弹性搜索版本0.90.5
2 回答
以防其他人有同样的问题 . 在同一索引中有另一个类型/表(feed2),其中“title”字段设置为“not_analyzed” .
出于某种原因,即使您指定了类型:http://elasticsearchhost.com:9200/index_name/feed/_search,另一种类型仍在搜索中 . 更改feed2类型的映射修复了问题 .
您可能有另一个名为'title'的字段,在同一索引中具有另一种类型 but 的不同映射 .
基本上,如果在同一索引中有2个具有相同名称的字段 - 即使它们属于不同的类型 - 它们具有不同的映射:更准确,即使它们具有相同的类型(例如:"string"),但其中一个是"analyzed",另一个是"not analyzed",会出现问题 .
我的意思是,是的,你可以尝试设置2个不同的映射,ElasticSearch不会抱怨,但是当你搜索时会得到奇怪的结果,一切都会变成香蕉 .
你可以在这里找到更多关于这个问题的信息here:
是的,考虑到ElasticSearch的承诺一直是如此,这个小细节让很多人感到意外 .