Удаление номеров из токенов Elasticsearch - PullRequest
0 голосов
/ 25 октября 2018

Текст, который я анализирую в 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
          }

1 Ответ

0 голосов
/ 25 октября 2018

Вы, кажется, потеряли char_filter в вышеуказанных настройках.

Согласно этой документации , char_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":""
            }
         }
      }
   }
}

Надеюсь, это поможет!

...