例如,我尝试在给定字段上使用angularjs和elasticsearch创建自动完成功能countryname
。它可以包含简单的名称,例如“法国”,“西班牙”或“组合名称”,例如“塞拉利昂”。
在映射中,此字段是not_analyzed
为了防止弹性标记“组合名称”
"COUNTRYNAME" : {"type" : "string", "store" : "yes","index": "not_analyzed" }
我需要查询elasticsearch:
我不能在“ not_analyzed”字段中使用通配符:
这是我的查询,但“值”变量中的通配符不起作用,并且区分大小写:
仅通配符她的工作:
curl -XGET 'local_host:9200/botanic/specimens/_search?size=0' -d '{
"fields": [
"COUNTRYNAME"
],
"query": {
"query_string": {
"query": "COUNTRYNAME:*"
}
},
"aggs": {
"general": {
"terms": {
"field": "COUNTRYNAME",
"size": 0
}
}
}
}'
但这不起作用(franc *):
curl -XGET 'local_host:9200/botanic/specimens/_search?size=0' -d '{
"fields": [
"COUNTRYNAME"
],
"query": {
"query_string": {
"query": "COUNTRYNAME:Franc*"
}
},
"aggs": {
"general": {
"terms": {
"field": "COUNTRYNAME",
"size": 0
}
}
}
}'
我也尝试过bool must query
但不使用此not_analyzed字段和通配符:
curl -XGET 'local_host:9200/botanic/specimens/_search?size=0' -d '{
"fields": [
"COUNTRYNAME"
],
"query": {
"bool": {
"must": [
{
"match": {
"COUNTRYNAME": "Franc*"
}
}
]
}
},
"aggs": {
"general": {
"terms": {
"field": "COUNTRYNAME",
"size": 0
}
}
}
}'
我缺少或做错了什么?我应该analyzed
在映射中保留该字段,并使用另一个不将组合名称拆分为令牌的分析器吗?
我找到了一个可行的解决方案:“关键字”令牌生成器。创建一个自定义分析器,并将其用于我要保留的字段的映射中,而不用空格分开:
curl -XPUT 'localhost:9200/botanic/' -d '{
"settings":{
"index":{
"analysis":{
"analyzer":{
"keylower":{
"tokenizer":"keyword",
"filter":"lowercase"
}
}
}
}
},
"mappings":{
"specimens" : {
"_all" : {"enabled" : true},
"_index" : {"enabled" : true},
"_id" : {"index": "not_analyzed", "store" : false},
"properties" : {
"_id" : {"type" : "string", "store" : "no","index": "not_analyzed" } ,
...
"LOCATIONID" : {"type" : "string", "store" : "yes","index": "not_analyzed" } ,
"AVERAGEALTITUDEROUNDED" : {"type" : "string", "store" : "yes","index": "analyzed" } ,
"CONTINENT" : {"type" : "string","analyzer":"keylower" } ,
"COUNTRYNAME" : {"type" : "string","analyzer":"keylower" } ,
"COUNTRYCODE" : {"type" : "string", "store" : "yes","index": "analyzed" } ,
"COUNTY" : {"type" : "string","analyzer":"keylower" } ,
"LOCALITY" : {"type" : "string","analyzer":"keylower" }
}
}
}
}'
因此我可以在字段COUNTRYNAME的查询中使用通配符,该字段不会被拆分:
curl -XGET 'localhost:9200/botanic/specimens/_search?size=10' -d '{
"fields" : ["COUNTRYNAME"],
"query": {"query_string" : {
"query": "COUNTRYNAME:bol*"
}},
"aggs" : {
"general" : {
"terms" : {
"field" : "COUNTRYNAME", "size":0
}
}
}}'
结果 :
{
"took" : 14,
"timed_out" : false,
"_shards" : {
"total" : 5,
"successful" : 5,
"failed" : 0
},
"hits" : {
"total" : 45,
"max_score" : 1.0,
"hits" : [{
"_index" : "botanic",
"_type" : "specimens",
"_id" : "91E7B53B61DF4E76BF70C780315A5DFD",
"_score" : 1.0,
"fields" : {
"COUNTRYNAME" : ["Bolivia, Plurinational State of"]
}
}, {
"_index" : "botanic",
"_type" : "specimens",
"_id" : "7D811B5D08FF4F17BA174A3D294B5986",
"_score" : 1.0,
"fields" : {
"COUNTRYNAME" : ["Bolivia, Plurinational State of"]
}
} ...
]
},
"aggregations" : {
"general" : {
"buckets" : [{
"key" : "bolivia, plurinational state of",
"doc_count" : 45
}
]
}
}
}
我已经在这里阅读了关于刷新令牌的解释:https://stackoverflow.com/a/36280559/11634814,我认为它很有意义。简而言之,刷新令牌很有用,因为每次只有一个未过期的访问令牌与每个刷新令牌相关联。如果Bob偷了Alice的refresh令牌,我们可以检测到这一点,因为他会尝试使用它用Alice的令牌发出新的请求,即使Alice的访问令牌没有过期。 当相应的访问令牌未
在spring boot应用程序中,当将一个对象索引到es中时,我会遇到以下异常。 这个类有两个静态字段和两个类型为的实例变量,还有一个视图方法,其中一个是被重写的toString。 映射如下。没有映射,索引就可以正常工作。但是,由于对象可以为null,因此需要配置null_值。 我试图将替换为,但是,文档声明:“一个字符串值,它被展平对象字段中的任何显式空值替换。默认值为null,这意味着空si
问题内容: 我正在调用一些JSON并将相关数据解析为CSV。我无法弄清楚如何使用默认密钥填充中间的JSON dict文件,因为其中很多是未填充的。当我尝试将内容解析为CSV时,结果为KeyError。 我现在收到(制造商)的“ NoneType”错误: 问题答案: 您可以使用而不是直接引用键。
elasticSearch搜索:比如,我有一个关键字是“北京地铁”,但是我只想搜索挨着的关键词,比如搜索【北京】或者搜索【地铁】或者在搜索【北京地铁】这种的可以保证能匹配到,但是如果隔词搜索就不让他显示出来,比如:【北地】,【京铁】,这种隔词了,就不让搜索出来如何处理,不采用match_phrase的方法,还有没有更加高效的方法? 我尝试过使用match_phrase可以做到我要的结果,但是mat
例如: 通用 elasticsearch-rest默认使用了几个简单的注解 3.2.1 Document注解 @Document 说明这个 class 是实体类,并且使用默认的 es 规则,即 indexName 名即 es 中的索引,class 字段名即 es 的字段名 @Table 注解可以配置 indexName,aliasName,type,shards,replicas,maxResul
问题内容: 假设我有下表: 我可以使用以下JSON结构在ElasticSearch中轻松映射它: 如果然后有第二个表称为该表在外键中引用,例如: 然后,我将如何在Elasticsearch中映射该关系?是否有一种通用方法可以在Elasticsearch中映射具有一个或多个外键关系的两个表?例如,通过执行特定的join语句? 问题答案: 在SQL世界中,一切都与保持表之间的关系有关,以使数据永远不会