我想索引和搜索第 101、第 101 等,如 101、102 等。ElasticSearch 是否有一个过滤器可以做到这一点?
最佳答案
您可以简单地使用 pattern_replace char 过滤器,创建像 101
这样的标记, 102
来自文本101st
, 101nd
或 102
.
我创建了一个自定义分析器,它删除了文本并只保留了数字,以便搜索 100
, 102
10
匹配倒排索引中的标记并出现在搜索结果中。
工作示例
使用 pattern_replace 的自定义分析器的索引 def。
{
"settings": {
"analysis": {
"analyzer": {
"my_analyzer": {
"tokenizer": "standard",
"char_filter": [
"my_char_filter"
],
"filter": [
"lowercase"
]
}
},
"char_filter": {
"my_char_filter": {
"type": "pattern_replace",
"pattern": "[a-z]+", --> note this
"replacement": ""
}
}
}
}
}
测试一下 custom-analyzer使用 analyze API .
POST /{your-index-name}/_analyze
{
"analyzer": "my_analyzer",
"text": "101nd"
}
{
"tokens": [
{
"token": "101",
"start_offset": 0,
"end_offset": 5,
"type": "<NUM>",
"position": 0
}
]
}
另一个样本
POST/{您的索引名称}/_analyze
{
"analyzer": "my_analyzer",
"text": "102st"
}
{
"tokens": [
{
"token": "102",
"start_offset": 0,
"end_offset": 5,
"type": "<NUM>",
"position": 0
}
]
}
关于elasticsearch - 是否有用于索引/搜索序数作为数值的过滤器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61106622/