Примените html_strip и фильтр нижнего регистра к анализируемому ключевому полю

elasticsearch

212 просмотра

1 ответ

Я попытался применить html_strip и строчный фильтр к анализируемому ключевому полю. Во время поиска я заметил, что результаты поиска не такие, как ожидалось.

Это индекс, который мы пытались создать

PUT /test_index
{
  "settings": {
  "number_of_shards": 5,
  "number_of_replicas": 0,
  "analysis": {
    "analyzer": {
      "ExportPrimaryAnalyzer": {
        "type": "custom",
        "tokenizer": "whitespace",
        "filter": "lowercase",
        "char_filter": "html_strip"
      },
      "ExportRawAnalyzer": {
        "type": "custom",
        "buffer_size": "1000",
        "tokenizer": "keyword",
        "filter": "lowercase",
        "char_filter": "html_strip"
      }
    }
  }
}, 
  "mappings": {
    "test_type": {
      "properties": {
        "city": {
          "type": "string",
          "analyzer" : "ExportPrimaryAnalyzer"
        },
        "city_raw":{
          "type": "string",
          "analyzer" : "ExportRawAnalyzer"
        }
      }
    }
  }
}

И вот пример данных:

PUT test_index/test_type/4
{
  "city": "<p>I am from Pune</p>",
  "city_raw": "<p>I am from Pune</p>"
}

Когда мы пытаемся использовать подстановочный знак, мы не получаем результатов. Ниже приведен запрос, который мы пытались выполнить.

{
  "query": {
    "wildcard": {
      "city_raw": "i am*"
    }
  }
}

Любая помощь приветствуется

Автор: Hitesh Hotchandani Источник Размещён: 08.11.2019 11:22

Ответы (1)


0 плюса

html_strip_filterзаменит элементы блока html на new-lines. Следовательно, если вы используете a, keyword-tokenizerвам понадобится дополнительный фильтр для замены new-linesпустой строкой.

Пример :

PUT test
{
   "settings": {
      "number_of_shards": 5,
      "number_of_replicas": 0,
      "analysis": {
         "char_filter": {
            "remove_new_line": {
               "type": "mapping",
               "mappings": [
                  "\\n =>"
               ]
            }
         },
         "analyzer": {
            "ExportPrimaryAnalyzer": {
               "type": "custom",
               "tokenizer": "whitespace",
               "filter": [
                  "lowercase"
               ],
               "char_filter": [
                  "html_strip"
               ]
            },
            "ExportRawAnalyzer": {
               "type": "custom",
               "buffer_size": "1000",
               "tokenizer": "keyword",
               "filter": [
                  "lowercase"
               ],
               "char_filter": [
                  "html_strip",
                  "remove_new_line"
               ]
            }
         }
      }
   },
   "mappings": {
      "test_type": {
         "properties": {
            "city": {
               "type": "string",
               "analyzer": "ExportPrimaryAnalyzer"
            },
            "city_raw": {
               "type": "string",
               "analyzer": "ExportRawAnalyzer"
            }
         }
      }
   }
}

PUT test/test_type/4
{
  "city": "<p>I am from Bangalore I like Pune too</p>",
  "city_raw": "<p>I am from Bangalore I like Pune too</p>"
}

post test/_search
{
  "query": {
    "wildcard": {
      "city_raw": "i am *"
    }
  }
}

Результат:

"hits": [
     {
        "_index": "test",
        "_type": "test_type",
        "_id": "4",
        "_score": 1,
        "_source": {
           "city": "<p>I am from Bangalore I like Pune too</p>",
           "city_raw": "<p>I am from Bangalore I like Pune too</p>"
        }
     }
  ]
Автор: keety Размещён: 20.08.2016 07:50
Вопросы из категории :
32x32