我想要一个Elasticsearch索引,它只存储功能的“名称”。我希望能够发出语音查询,也可以单独键入前置式查询。我想我可以用两个分析器和两个过滤器创建一个索引;每个分析仪可以使用其中一个过滤器。但我似乎无法做到这一点。
以下是我尝试使用的索引设置json:
{
"settings": {
"number_of_shards": 1,
"analysis": {
"analyzer": {
"autocomplete_analyzer": {
"type": "custom",
"tokenizer": "standard",
"filter": ["standard", "lowercase", "ngram"]
}
},
"analyzer": {
"phonetic_analyzer": {
"tokenizer": "standard",
"filter": "double_metaphone_filter"
}
},
"filter": {
"double_metaphone_filter": {
"type": "phonetic",
"encoder": "double_metaphone"
}
},
"filter": {
"ngram": {
"type": "ngram",
"min_gram": 2,
"max_gram": 15
}
}
}
}
}
当我尝试使用这些设置创建索引时:
http://hostname:9200/index/type
我得到一个HTTP 400,说
Custom Analyzer [phonetic_analyzer] failed to find filter under name [double_metaphone_filter]
别误会,我完全明白这句话的意思。我看了又看,寻找一个错误的逗号或引号,但我没有看到任何。否则,一切都在那里,格式正确。
如果删除语音分析器,将创建索引,但仅使用自动完成分析器和ngram过滤器。
如果我删除ngram过滤器,则仅使用语音分析器和语音过滤器创建索引。
我有一种感觉,我缺少了ES的一个基本概念,比如每个索引只有一个分析器,或者每个索引只有一个过滤器,或者我必须正确设置一些其他逻辑依赖项,等等。拥有Elasticsearch基础设施的逻辑图或完整API规范当然很好,即任何索引都可以有1.n个分析器,只有1个过滤器,查询必须需要bool、match等中的任何一个。但那只独角兽似乎并不存在。
我看到了大量关于如何执行这些功能的留档、博客文章等,但索引上只有一个分析器和一个过滤器。我真的很想在一个索引上执行这个双重功能(出于超出范围的原因)。
有人能提供一些帮助和建议吗?
您只是缺少设置对象的正确格式。您不能有两个analyzer或filter键,因为在此设置映射对象中每个键只能有一个值。提供过滤器列表似乎效果很好。创建索引对象时,第二个键覆盖了第一个键。
看这里:
"settings": {
"number_of_shards": 1,
"analysis": {
"filter": {
"double_metaphone_filter": {
"type": "phonetic",
"encoder": "double_metaphone"
},
"ngram": {
"type": "ngram",
"min_gram": 2,
"max_gram": 15
}
},
"analyzer": {
"autocomplete_analyzer": {
"type": "custom",
"tokenizer": "standard",
"filter": ["standard", "lowercase", "ngram"]
},
"phonetic_analyzer": {
"tokenizer": "standard",
"filter": "double_metaphone_filter"
}
}
}
}
我下载了插件来确认这一点。现在,您可以使用有效负载在分析点进行测试:
{
"analyzer":"autocomplete_analyzer",
"text":"Jonnie Smythe"
}
问题内容: 我正在尝试建立一个查询,该查询将找到所有用户文档(docType =用户),然后根据许多过滤器对其进行过滤。例如位置,性别,年龄等。过滤器是根据我正在构建的搜索功能上的用户输入来添加/删除的。 以下没有结果: 以下返回结果: 后者虽然返回结果,但从长远来看是行不通的,因为我可能想为年龄,性别等添加一个额外的过滤器,而且我似乎无法添加多个字段。如果我删除位置过滤器,则第一个查询有效。 问
问题内容: 假设我有: 每个产品都有属性。每个属性都有ID和一个值。我可以按属性筛选产品,但现在我要从MongoDB创建“可能的属性”列表。我想找到一种单独从ElasticSearch生成这样的列表的方法(也许只是向MongoDB查询其他数据)。 我需要的是: 这样的聚合看起来如何?获取所有可用属性(按分组)及其所有可能值(在所有产品中)? 问题答案: 您无法在一个查询中做到这一点,但在两个查询中
问题内容: 假设我们在ElasticSearch索引中有一堆文档。每个文档 在一个数组中 都有多个位置,如下所示: 根据ElasticSearch参考指南 该过滤器可以针对每个文档使用多个位置/点。一旦单个位置/点与过滤器匹配,则文档将包含在过滤器中。 因此,是否可以创建检查数组中所有位置的地理距离过滤器? 不幸的是,这似乎不起作用: 抛出“ ”,因为它不是单个值,而是s 的数组。 问题答案: 您
问题内容: 我在同一台Ubuntu服务器上有一个Rails 3应用程序的暂存和生产实例(使用tyre gem)。看来这两个实例都共享相同的elasticsearch索引,这显然不是我想要的。 如何使生产和登台实例使用单独的实例? 问题答案: 您需要覆盖索引名称。假设您要绑定ActiveRecord,它将根据相关模型创建索引名称。您可以使用这样的前缀来调整名称; 然后会创建一个名为的索引,以此类推。
我可以用CURL设置breaker.fielddata限制,但不遵守config中的设置: ES版本:1.6.0 在我的节点配置中 /etc/elasticsearch/elasticsearch.yml 配置中将fielddata限制设置为60%(8G堆中的4.7G),但是: 我可以将indices.breaker.fielddata.limit更改为60% 为什么配置中的行形式不受尊重?
问题内容: 我有一个带有3个索引的elasticsearch集群: 因此,现在我需要运行处理多个索引的查询。 例如: 获取在页面X中注册的用户的性别。 ( 要获取此信息,我需要来自多个索引的信息。 ) 这可能吗?也许整合Hadoop? 问题答案: 在Elasticsearch本身中,这非常容易!任何时候您指定索引时,都可以用逗号分隔其他索引。 您也可以使用_all搜索所有索引。 这是来自Elast