所以伙计们,我开始研究elasticsearch,并开始尝试在我的机器上构建一个带有edge-ngram标记器的自动完成,并在尝试遵循此类配置的留档时发现了一个问题。
我遵循了以下步骤:
>
根据文档要求,我使用标准配置创建了索引:
{
"settings": {
"analysis": {
"analyzer": {
"autocomplete": {
"tokenizer": "autocomplete",
"filter": [
"lowercase"
]
},
"autocomplete_search": {
"tokenizer": "lowercase"
}
},
"tokenizer": {
"autocomplete": {
"type": "edge_ngram",
"min_gram": 2,
"max_gram": 10,
"token_chars": [
"letter"
]
}
}
}
}
}
我通过批量向索引中添加了一项:
{"index":{"_index":"products","_type":"products"}}{"sku":"73792589","name":"Bruno's test","img":"73792589_5911_20201229172349.jpg,73792589_5911_20201229172349.jpg,73792589_5911_20201229172349.jpg,73792589_5911_20201229172349.jpg,73792589_5911_20201229172349.jpg,73792589_5911_20201229172349.jpg,73792589_5911_20201229172349.jpg,73792589_5911_20201229172349.jpg","avaliacao":0,"preco_de":159,"preco_por":143.1}
我试图更新字段映射以引用我的自定义分析仪
问题:当尝试继续执行步骤3时,以下错误返回给我:
[REQUEST] _mapping
{
"properties": {
"name": {
"type": "text",
"analyzer": "autocomplete",
"search_analyzer": "autocomplete_search",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"sku": {
"type": "text",
"analyzer": "autocomplete",
"search_analyzer": "autocomplete_search",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
}
[RESPONSE]
{
"error": {
"root_cause": [
{
"type": "illegal_argument_exception",
"reason": "Mapper for [name] conflicts with existing mapper:\n\tCannot update parameter [analyzer] from [default] to [autocomplete]"
}
],
"type": "illegal_argument_exception",
"reason": "Mapper for [name] conflicts with existing mapper:\n\tCannot update parameter [analyzer] from [default] to [autocomplete]"
},
"status": 400
}
为产品索引添加设置后,您对数据进行了索引,但没有定义任何显式映射。因此,生成了动态映射。
索引的映射是
{
"products": {
"mappings": {
"properties": {
"avaliacao": {
"type": "long"
},
"img": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"name": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"preco_de": {
"type": "long"
},
"preco_por": {
"type": "float"
},
"sku": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
}
}
}
现在,您正在尝试更新索引的映射(在第3步中)。您希望将analyzer参数与字段一起添加,但这无法完成。这是因为在更新索引映射时,您可以-
要了解有关更新映射API的更多信息,请参阅此留档
(您需要首先删除产品索引)按照以下步骤索引批量数据(使用适当的索引映射)
1.第一步:索引映射
{
"settings": {
"analysis": {
"analyzer": {
"autocomplete": {
"tokenizer": "autocomplete",
"filter": [
"lowercase"
]
},
"autocomplete_search": {
"tokenizer": "lowercase"
}
},
"tokenizer": {
"autocomplete": {
"type": "edge_ngram",
"min_gram": 2,
"max_gram": 10,
"token_chars": [
"letter"
]
}
}
}
},
"mappings": {
"properties": {
"name": {
"type": "text",
"analyzer": "autocomplete",
"search_analyzer": "autocomplete_search",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"sku": {
"type": "text",
"analyzer": "autocomplete",
"search_analyzer": "autocomplete_search",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
}
}
第二步:索引批量数据
POST/ _bulk
{"index":{"_index":"products","_type":"products"}}
{"sku":"73792589","name":"Bruno's test","img":"73792589_5911_20201229172349.jpg,73792589_5911_20201229172349.jpg,73792589_5911_20201229172349.jpg,73792589_5911_20201229172349.jpg,73792589_5911_20201229172349.jpg,73792589_5911_20201229172349.jpg,73792589_5911_20201229172349.jpg,73792589_5911_20201229172349.jpg","avaliacao":0,"preco_de":159,"preco_por":143.1}
问题内容: 我有来自Logstash的数据,这些数据正在以过度的方式进行分析。从本质上讲,该领域将被分解成, 和。我知道我可以更改现有数据的映射和重新索引,但是如何更改默认分析器(在ElasticSearch或LogStash中)以避免将来的数据出现此问题? 具体解决方案:在我第一次将数据发送到新集群之前,我为该类型创建了一个映射。 IRC解决方案:创建索引模板 问题答案: 如您所知,当未明确指定
问题内容: 我在Elasticsearch上遇到问题,我不希望对索引项进行分析。但是elasticsearch有一些默认设置,可以在空间上标记它。因此,我的方面查询未返回我想要的结果。 我读到索引类型的属性应该工作。但是问题是我事先不知道我的文档结构。我会在不知道表结构的情况下将随机MySQL数据库索引到elasticsearch。 我如何设置elasticsearch,使其默认情况下会一直使用,
本文向大家介绍JS函数多个参数默认值指定方法分析,包括了JS函数多个参数默认值指定方法分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JS函数多个参数默认值指定方法。分享给大家供大家参考,具体如下: 函数有一个参数时,以往这样定义(参数为p1): 当需要为p1设定一个默认值时 当函数需要2个参数时,以前习惯这样写 后来发现完全不需要这样写,js函数甚至不需要在括弧内预设参数名,可以用一
问题内容: 我想在一个类中构建一个方法,并从该类中获取默认值参数。通常,我会对某些数据进行过滤。在我的班级内部,我有一个方法,通常我会传递数据向量。有时我没有矢量,而是获取了模拟数据。每次我不传递特定向量时,我都希望默认情况下获取模拟数据。我认为在我说的方法定义中应该很容易构造。但是由于某种原因,我有一个错误。简化的结构是: 我期望的输出应该是: 我尝试了默认分配,因为它显然无法正常工作。据我了解
问题内容: 在我的系统中,数据插入始终是通过logstash通过csv文件完成的。我从未预定义映射。但每当我输入它总是被一个字符串是,其结果就像一个条目被分为,,,。无论如何,我是否可以更改elasticsearch的默认/动态映射,以便所有字符串(无论索引如何,无论类型如何)都被视为?还是有一种在文件中设置它的方法?说我的档案看起来像 我希望所有的字符串都是这样,我也不介意将其作为所有将来的数据
问题内容: 是否可以将现有字段的属性从修改为? 如果没有,我该怎么办才能将我所有的文件保存起来? 我无法删除映射(因为所有文档都将消失),并且需要该旧字段进行分析。 问题答案: 不能修改现有字段,但是,您可以创建其他字段或子字段添加到您的领域。 我要使用后一种解决方案。因此,首先,将一个新的子字段添加到您现有的字段中,如下所示: 上面,我们已经添加了子场称为(被分析)现有的(这是) 接下来,我们需