【问题标题】:Removing numbers from Elasticsearch tokens从 Elasticsearch 令牌中删除数字
【发布时间】:2019-03-30 12:31:53
【问题描述】:

我在 Elasticsearch-6 中分析的文本有许多我不感兴趣的数字,但我不知道如何删除它们。谢谢,我对代币的搜索将带回邮政编码、时间或年份。我可以将它们添加到停用词中的不同年份很少。但是其他人太多了,无法通过这种方式过滤掉它们。

我确实尝试过编写自定义过滤器:

"char_filter": {
                "number_filter": {
                        "type": "pattern_replace",
                        "pattern": "\\d+",
                        "replacement": " "
            }        

但是当我尝试在设置中添加它时,我收到了以下错误:

由于缺少“。”,无法获取 [index.analysis.analyzer.] 设置前缀和设置 [index.analysis.analyzer.char_filter] 的设置组

这是我的配置的全部设置部分(注意:在我添加数字替换器之前它工作):

    "settings": {
        "analysis": {
            "analyzer": {
                "t_analyzer": {
                    "tokenizer": "t_tokenizer"            
                },
                "major_words_analyzer": {
                        "type": "standard",
                        "stopwords": "_english_"
                },
                "char_filter": [
                        "number_filter"        
                ]
            },
            "tokenizer": {
                "t_tokenizer": {
                    "type": "standard"        
                }        
            },
            "char_filter": {
                "number_filter": {
                        "type": "pattern_replace",
                        "pattern": "\\d+",
                        "replacement": " "
            }        
        }
    }
}

编辑:这是相关的字段设置:

    },  
    "narrative": {
      "type": "text",
      "store": "true",
      "analyzer": "t_analyzer",
      "fielddata": "true",
      "fields": {
        "raw": {
          "type": "text"
        }
      }
    },
    "narrativePhrases": {
      "type": "text",
      "analyzer": "major_words_analyzer",
      "fielddata": "true",
      "fields": {
        "keyword": {
          "type": "keyword"
        }
      }
    },            

编辑:我之后要做的是:

    POST /test_narrative/_search?size=0
    {
        "aggs": {
            "incidents_by_month":{
                "date_histogram":{
                    "field":"eventDate",
                    "interval":"month",
                    "min_doc_count" : 5
                },
                "aggs":{
                    "top_phrases":{
                        "significant_text": {
                          "field": "narrative",
                          "size": 10
                        }
                    }
                }
            }
        }
    }

而且我的返回值中仍然有数字:

    {
            "key": "personally",
            "doc_count": 3,
            "score": 5.22625236294896,
            "bg_count": 36
          },
          {
            "key": "2011",
            "doc_count": 4,
            "score": 2.4786045712321703,
            "bg_count": 132
          }

【问题讨论】:

    标签: elasticsearch elasticsearch-6


    【解决方案1】:

    您似乎在上述设置中放错了char_filter

    根据这个documentationchar_filter 是您要创建的custom analyzer 的参数之一,因此它必须在t_analyzer 和/或major_words_analyzer 内,具体取决于您的要求。例如

    "t_analyzer":{  
       "tokenizer":"t_tokenizer",
       "char_filter":[  
          "number_filter"
       ]
    }
    

    如果您打算在两个分析器上使用char_filter,这意味着您的设置必须采用以下方式。

    PUT numberindex
    {  
       "settings":{  
          "analysis":{  
             "analyzer":{  
                "t_analyzer":{  
                   "tokenizer":"t_tokenizer",
                   "char_filter":[  
                      "number_filter"
                   ]
                },
                "major_words_analyzer":{  
                   "type":"standard",
                   "stopwords":"_english_",
                   "char_filter":[  
                      "number_filter"
                   ]
                }
             },
             "tokenizer":{  
                "t_tokenizer":{  
                   "type":"standard"
                }
             },
             "char_filter":{  
                "number_filter":{  
                   "type":"pattern_replace",
                   "pattern":"\\d+",
                   "replacement":""
                }
             }
          }
       }
    }
    

    希望对你有帮助!

    【讨论】:

    • 嗯。也许我不明白这应该做什么。我希望在加载时过滤文本。但是当我汇总条款时,我仍然看到数字。
    • 嘿@amracel,您能否使用示例数据更新问题现在的显示方式以及您要搜索的内容以及您的预期查询结果?查看您的问题、错误和配置/设置,我添加了上述答案,可以解决该问题。
    • 我已经添加了我的查询并显示了我得到的结果。我确实尝试了您的更改,但仍然得到相同(类型)的结果。
    • @amracel 您是否尝试过删除索引并重新索引数据?如果是这样,您能否与我分享您的映射详细信息,即用它更新问题?我已经使用上述设置创建了一个示例索引,它确实按预期工作。
    • 它解决了问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-17
    • 1970-01-01
    • 2020-01-31
    • 2017-01-18
    • 1970-01-01
    • 1970-01-01
    • 2022-10-25
    相关资源
    最近更新 更多