为什么HTML标记是可搜索的,即使它是在弹性搜索中过滤的

时间:2015-02-11 02:40:53

标签: elasticsearch

我是elasticsearch的新手,正在测试html_strip过滤器。理想情况下,我不应该搜索HTML标记。以下是步骤。

指数:

curl -XPOST 'localhost:9200/foo/test/_analyzer?tokenizer=standard&char_filters=html_strip' -d '
{
    "content" : "<title>Dilip Kumar</title>"
}'

搜索:

http://localhost:9200/foo/test/_search?tokenizer=standard&char_filters=html_strip&q=title

结果:

{
  "took": 3,
  "timed_out": false,
  "_shards": {
    "total": 5,
    "successful": 5,
    "failed": 0
  },
  "hits": {
    "total": 1,
    "max_score": 0.2169777,
    "hits": [
      {
        "_index": "foo",
        "_type": "test",
        "_id": "_analyzer",
        "_score": 0.2169777,
        "_source": {
          "content": "<title>Dilip Kumar</title>"
        }
      }
    ]
  }
}

更新 如建议;我在删除现有索引后使用了以下映射并重复了上述步骤,但仍然可以搜索标记。

curl -XPUT "http://localhost:9200/foo " -d'
{
  "foo": {
    "settings": {
      "analysis": {
        "analyzer": {
          "html_analyzer": {
            "type": "custom",
            "tokenizer": "standard",
            "filter": [
              "standard",
              "lowercase",
              "stop",
              "asciifolding"
            ],
            "char_filter": [
              "html_strip"
            ]
          },
          "whitespace_analyzer": {
            "type": "custom",
            "tokenizer": "whitespace",
            "filter": [
              "standard",
              "lowercase",
              "stop",
              "asciifolding"
            ]
          }
        }
      }
    },
    "mappings": {
      "test": {
        "properties": {
          "content": {
            "type": "string",
            "index_analyzer": "html_analyzer",
            "search_analyzer": "whitespace_analyzer"
          }
        }
      }
    }
  }
}'

1 个答案:

答案 0 :(得分:0)

您需要在对映射建立索引之前应用分析器。 这将确保所有索引的文档都通过此映射,并在索引之前删除所有标记。 在您的情况下,您在查询时应用了分析器,这只会影响您的搜索短语,而不会影响您搜索的数据。

您可以阅读有关创建地图here

的更多信息

我不相信有这样的格式 -

http://localhost:9200/foo/test/_search?tokenizer=standard&char_filters=html_strip&q=title

相反,如果您可以按如下方式设置分析仪,它应该可以正常工作 -

curl -XPUT "http://localhost:9200/foo " -d'
{
  "foo": {
    "settings": {
      "analysis": {
        "analyzer": {
          "html_analyzer": {
            "type": "custom",
            "tokenizer": "standard",
            "filter": [
              "standard",
              "lowercase",
              "stop",
              "asciifolding"
            ],
            "char_filter": [
              "html_strip"
            ]
          },
          "whitespace_analyzer": {
            "type": "custom",
            "tokenizer": "whitespace",
            "filter": [
              "standard",
              "lowercase",
              "stop",
              "asciifolding"
            ]
          }
        }
      }
    },
    "mappings": {
      "test": {
        "properties": {
          "content": {
            "type": "string",
            "analyzer": "html_analyzer"
          }
        }
      }
    }
  }
}'

在这里,我使分析器常用于索引和搜索