在elasticsearch映射的mapping char_filter部分,它有点模糊,我很难理解是否以及如何使用charfilter analyzer:http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/analysis-mapping-charfilter.html
基本上,我们存储在索引中的数据是类型为String
的ID,如下所示:“00839234200”
。当查询词实际上包含连字符或尾随空格时,我希望能够搜索这样的ID:“008392342-000”
。
您建议我如何设置分析仪?目前,这是该字段的定义:
"mappings": {
"client": {
"properties": {
"ucn": {
"type": "multi_field",
"fields": {
"ucn_autoc": {
"type": "string",
"index": "analyzed",
"index_analyzer": "autocomplete_index",
"search_analyzer": "autocomplete_search"
},
"ucn": {
"type": "string",
"index": "not_analyzed"
}
}
}
}
}
}
以下是包含分析器等的索引的设置。
"settings": {
"analysis": {
"filter": {
"autocomplete_ngram": {
"max_gram": 15,
"min_gram": 1,
"type": "edge_ngram"
},
"ngram_filter": {
"type": "nGram",
"min_gram": 2,
"max_gram": 8
}
},
"analyzer": {
"lowercase_analyzer": {
"filter": [
"lowercase"
],
"tokenizer": "keyword"
},
"autocomplete_index": {
"filter": [
"lowercase",
"autocomplete_ngram"
],
"tokenizer": "keyword"
},
"ngram_index": {
"filter": [
"ngram_filter",
"lowercase"
],
"tokenizer": "keyword"
},
"autocomplete_search": {
"filter": [
"lowercase"
],
"tokenizer": "keyword"
},
"ngram_search": {
"filter": [
"lowercase"
],
"tokenizer": "keyword"
}
},
"index": {
"number_of_shards": 6,
"number_of_replicas": 1
}
}
}
您还没有提供实际的分析仪、输入的数据以及您的期望值,但根据您提供的信息,我将从以下内容开始:
{
"settings": {
"analysis": {
"char_filter": {
"my_mapping": {
"type": "mapping",
"mappings": [
"-=>"
]
}
},
"analyzer": {
"autocomplete_search": {
"tokenizer": "keyword",
"char_filter": [
"my_mapping"
],
"filter": [
"trim"
]
},
"autocomplete_index": {
"tokenizer": "keyword",
"filter": [
"trim"
]
}
}
}
},
"mappings": {
"test": {
"properties": {
"ucn": {
"type": "multi_field",
"fields": {
"ucn_autoc": {
"type": "string",
"index": "analyzed",
"index_analyzer": "autocomplete_index",
"search_analyzer": "autocomplete_search"
},
"ucn": {
"type": "string",
"index": "not_analyzed"
}
}
}
}
}
}
}
字符过滤器将不使用任何内容替换-
:-=
测试分析器
GET/my\u index/\u analyze?analyzer=自动完成搜索
"tokens": [
{
"token": "012334742000",
"start_offset": 0,
"end_offset": 17,
"type": "word",
"position": 1
}
]
这意味着它确实消除了
-
和空白。典型的查询是:
{
"query": {
"match": {
"ucn.ucn_autoc": " 0123-34742-000 "
}
}
}
问题内容: 我必须找到具有字符串的匹配文档,例如:在某些“键”范围内的字符串:“ sky”。当我编写单独的匹配和范围查询时,我从ES中获得了输出,但是合并在一起时会抛出异常。 范围查询: 匹配查询: 组合查询: 组合查询在执行时会引发错误: 引发HTTP_EXCEPTIONS.get(状态码,TransportError)(状态码,error_message,Additional_info)ela
我正在尝试使用Selenium和python单击以下按钮: 这只是一个简单的按钮,如下所示: 代码: 这将导致以下异常: 所以,我尝试使用。 (使用访问第二个元素,因为第一个元素将导致
我试图从地址字符串中仅选择街道/单元号。 我的正则表达式模式是 目前,我的正则表达式在任何字母字符之前匹配'/'和。然而,我想排除拖尾。 我的正则表达式匹配 Sydney Road,Manly NSW(注意“2”后面的空格字符) 而不是 新南威尔士州曼利市悉尼路 以下是一些示例地址字符串: 新南威尔士州曼利市悉尼路61/2号
问题内容: 精简版: 我想使用Nest编写一个elasticsearch查询,以获取已被索引的完整索引项(在我的情况下为自定义类型)。该查询受[somestring] + *(即String.StartsWith())的术语查询的约束,其中[somestring]可能包含空格,也可能不包含空格。 这与由于我需要检索完整对象而不是字符串建议而不同。 到目前为止,我已经尝试过: 当我查询没有空格的文本
我是Elasticsearch新手,对匹配查询的工作方式感到困惑。我有以下映射: 我批量导入了以下文档 我验证了所有文档都已成功加载。然后我执行匹配查询: 它只返回#1文档。我在这里感到困惑。为什么它不返回所有三个文档?我应该使用什么查询来返回这三个文档,因为它们在字段中都有“quiet”根单词? 谢谢和问候。
问题内容: 该函数会删除尾部和前导空格,但是,如果我只想删除字符串的尾部空格,该怎么办? 问题答案: 如果您使用的是JDK 11或更高版本,则可能应该使用stripTrailing()。 早期的JDK版本 使用正则表达式,您可以将所有尾随空格字符(包括空格和制表符)替换为空字符串()。 输出量 在线演示。 这是正则表达式的细分: –任何空白字符, –匹配一个或多个先前的令牌(可能);即,匹配一个或