我在为elasticsearch实现自动完成功能时遇到问题,这是我的
设置:
创建自动完成的分析器
curl -XPUT http://localhost:9200/autocomplete/ -d '{
"index": {
"analysis": {
"analyzer": {
"placeNameIndexAnalyzer": {
"type": "custom",
"tokenizer": "keyword",
"filter": [
"trim",
"lowercase",
"asciifolding",
"left_ngram"
]
}
},
"filter": {
"left_ngram": {
"type": "edgeNGram",
"side": "front",
"min_gram": 3,
"max_gram": 12
}
}
}
}
}'
然后,使用“ alias”
属性中的分析器在自动完成中创建一个类型:
curl -XPUT http://localhost:9200/autocomplete/geo/_mapping/ -d '{
"geo": {
"properties": {
"application_id": {
"type": "string"
},
"alias": {
"type": "string",
"analyzer": "placeNameIndexAnalyzer"
},
"name": {
"type": "string"
},
"object_type": {
"type": "string"
}
}
}
}'
Afterwards; add a document:
curl -XPOST http://localhost:9200/autocomplete/geo -d '{
"application_id": "982",
"name": "Buenos Aires",
"alias": [
"bue",
"buenos aires",
"bsas",
"bs as",
"baires"
],
"object_type": "cities"
}'
When I run the following:
curl -XGET 'localhost:9200/autocomplete/geo/_search?q=alias:bs%20as'
result is
{
"took": 2,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 0,
"max_score": null,
"hits": []
}
}
and
curl -XGET 'localhost:9200/autocomplete/geo/_search?q=alias:bs as'
curl: (52) Empty reply from server
But I should be getting my document for in the “alias” field I have a “bs as”.
I tried using the _analyze
API and I get what I think is the correct answer
with the expected tokens:
curl -XGET 'localhost:9200/autocomplete/_analyze?analyzer=placeNameIndexAnalyzer' -d 'bs as'
result:
{
"tokens": [
{
"token": "bs ",
"start_offset": 0,
"end_offset": 5,
"type": "word",
"position": 1
},
{
"token": "bs a",
"start_offset": 0,
"end_offset": 5,
"type": "word",
"position": 1
},
{
"token": "bs as",
"start_offset": 0,
"end_offset": 5,
"type": "word",
"position": 1
}
]
}
Any Hints?
EDIT: when I run analyze with the actual type I get this:
curl -XGET 'localhost:9200/autocomplete/_analyze?analyzer=placeNameIndexAnalyzer' -d 'bs as'
result:
{
"_index": "autocomplete",
"_type": "geo",
"_id": "_analyze",
"exists": false
}
参数上使用的query_string查询首先通过在空格上分割查询字符串来解析查询字符串。您需要用
其他保留空间的东西替换它。在这里match查询将是一个不错的选择。我还将使用其他分析器进行搜索-您无需在其中应用
ngram:
curl -XPUT http://localhost:9200/autocomplete/ -d '
{
"index": {
"analysis": {
"analyzer": {
"placeNameIndexAnalyzer" : {
"type": "custom",
"tokenizer": "keyword",
"filter" : ["trim", "lowercase", "asciifolding", "left_ngram"]
},
"placeNameSearchAnalyzer" : {
"type": "custom",
"tokenizer": "keyword",
"filter" : ["trim", "lowercase", "asciifolding"]
}
},
"filter": {
"left_ngram": {
"type" : "edgeNGram",
"side" : "front",
"min_gram" : 3,
"max_gram" : 12
}
}
}
}
}'
curl -XPUT http://localhost:9200/autocomplete/geo/_mapping/ -d '
{
"geo": {
"properties": {
"application_id": {
"type": "string"
},
"alias": {
"type": "string",
"index_analyzer": "placeNameIndexAnalyzer",
"search_analyzer": "placeNameSearchAnalyzer"
},
"name": {
"type": "string"
},
"object_type": {
"type": "string"
}
}
}
}'
curl -XPOST "http://localhost:9200/autocomplete/geo?refresh=true" -d '
{
"application_id":"982",
"name":"Buenos Aires",
"alias":["bue", "buenos aires", "bsas", "bs as", "baires"],
"object_type":"cities"
}'
curl -XGET 'localhost:9200/autocomplete/geo/_search' -d '{
"query": {
"match": {
"alias": "bs as"
}
}
}'
问题内容: 我在为elasticsearch实现自动完成功能时遇到问题,这是我的设置: 创建自动完成的分析器 然后,使用“别名”属性中的分析器在自动完成中创建一个类型: 之后; 添加文档: 当我运行以下命令时: 结果是 和 但是我应该在“别名”字段中获取我的文档,我有一个“ bs as”。 我尝试使用API,并得到了我认为是预期令牌的正确答案: 结果: 有什么提示吗? 编辑: 当我用实际类型运行分
问题内容: 使用ES 1.2.1 我的聚集 } 问题是某些城市名称中包含空格,并分别汇总。 例如洛杉矶 我认为这与分析仪有关吗?我将使用哪一个不分割空格? 问题答案: 对于要对其进行聚合的字段,我建议您使用关键字分析器,或者根本不分析该字段。从关键字分析器文档中: 类型为关键字的分析器,可将整个流“标记为”单个标记。这对于诸如邮政编码,ID之类的数据很有用。注意,在使用映射定义时,将字段简单标
问题内容: 精简版: 我想使用Nest编写一个elasticsearch查询,以获取已被索引的完整索引项(在我的情况下为自定义类型)。该查询受[somestring] + *(即String.StartsWith())的术语查询的约束,其中[somestring]可能包含空格,也可能不包含空格。 这与由于我需要检索完整对象而不是字符串建议而不同。 到目前为止,我已经尝试过: 当我查询没有空格的文本
问题内容: 使用BeautifulSoul和Python,我希望所有与给定类属性匹配的项都包含这样的多个名称: 我尝试了几种匹配该类的方法。正则表达式,通配符,但我总是得到一个空列表。 有什么方法可以使用正则表达式,通配符或如何匹配此类? 问题答案: 您可以使用CSS选择器来匹配许多类:
另外,类型中的所有文档都存储了上面提到的community的值。感谢帮助。
问题内容: 我正在尝试Nest插件来查询elasticsearch数据。我有一个基于领域的年度工作计数报告。目前,我为此使用了日期直方图报告,下面是弹性查询。 等效嵌套查询 一切正常,但是现在问题是遍历结果以获取值,对于正常的聚合,我目前正在执行以下操作 但似乎Nest不支持带有日期直方图存储桶的存储桶。 如果我尝试如下所示,我将得到null引用异常。 看来我们必须使用如下所示的方法。d2现在具有