我正在尝试在Ubuntu 16.04 EC2服务器上部署Ruby on Rails应用,但是给出了关于Elasticsearch上max_gram和min_gram之间差异的错误,我没有任何Elasticsearch经验,所以我在这里完全迷失了,我需要一些指导来做到这一点,并学习如何设置它以避免将来出现此问题。
我第一次进行部署时,出现错误,拒绝与localhost:9200的连接,因此我不得不检查服务是否正在运行,甚至检查防火墙,最后我必须进行全新安装并配置所有内容在elasticsearch.yml上,现在正在运行并正常工作,但是当我再次尝试部署时出现错误,在Internet上进行了大量搜索,虽然有很多文档,但是我仍然无法在哪里设置这些值。 / p>
这是即时通讯上出现的错误:
Scanner myObj = new Scanner(System.in); // Create a Scanner object
System.out.println("Enter username");
String userName = myObj.nextLine(); // Read user input
elasticsearch上没有索引文件,默认模板上没有关于此设置的任何信息
答案 0 :(得分:2)
我遇到了类似的问题,并且以下错误消息清楚地解释了该问题。
[400] {“ error”:{“ root_cause”:[{“ type”:“ illegal_argument_exception”,“ reason”:“ The NGram Tokenizer中的max_gram和min_gram之间的差异必须为 小于或等于:1,但为[49]。可以通过以下方式设置此限制 更改[index.max_ngram_diff]索引级别 设置。“}],”类型“:” illegal_argument_exception“,”原因“:” NGram Tokenizer中的max_gram和min_gram之间的差异必须为 小于或等于:1,但为[49]。可以通过以下方式设置此限制 更改[index.max_ngram_diff]索引级别 设置。“},”状态“:400}
基本上,默认情况下,NGram Tokenizer中的max_gram和min_gram之差不能超过1,并且如果您要更改此值,则在索引设置中,您需要通过添加以下设置来进行更改。
"max_ngram_diff" : "50" --> you can mention this number accoding to your requirement.
下面是我的索引设置,您可以在其中看到我的47
和max_gram
有min_gram
的区别,因此将max_ngram_diff
设置为50
。
{
"settings": {
"index": {
"analysis": {
"analyzer": {
"prefix": {
"type": "custom",
"filter": [
"lowercaseFilter"
],
"tokenizer": "edgeNGramTokenizer"
}
},
"tokenizer": {
"edgeNGramTokenizer": {
"token_chars": [
"letter",
"digit"
],
"min_gram": "1",
"type": "edgeNGram",
"max_gram": "40"
},
"loginNGram": {
"type": "nGram",
"min_gram": "3",
"max_gram": "50"
}
}
},
"number_of_shards": "1",
"number_of_replicas": "0",
"max_ngram_diff" : "50"
}
}
}
编辑:添加一个official弹性文档,该文档解释说max_gram的默认长度为2而min_gram的默认长度为1,因此它们之间的默认差不能超过1,因此例外。然后来自同一文档的代码段
索引级别设置index.max_ngram_diff控制最大值 允许max_gram和min_gram之间的差异。
答案 1 :(得分:2)
还可以使用索引模板将设置自动应用于所有新索引:
curl -X PUT "localhost:9200/_index_template/template_1?pretty" -H 'Content-Type: application/json' -d'
{
"index_patterns": [
"*"
],
"template": {
"settings": {
"index": {
"max_ngram_diff": 50
}
}
}
}
'
删除每个索引不会删除模板,而是必须手动删除:
curl -X DELETE "localhost:9200/_index_template/template_1