Ama*_*tle 6 html elasticsearch
我有HTML文档,比方说:电子邮件.我想将这些存储在弹性搜索中并搜索HTML电子邮件的明文.
Elasticsearch也将索引所有HTML标记和属性.我不希望这样.我想搜索span它是否是纯文本,而不是html元素.例如,<span>span</span>可能是一个打击,但不是<span>some other content</span>.
您是否建议在文档中存储HTML剥离字段和HTML字段?或者我应该在S3上存储HTML文档,而是在弹性搜索中留下剥离的HTML版本?它甚至有意义吗?
老实说,如果弹性搜索正在索引HTML文档,我不知道会发生什么,但我可以想象它还将索引div和spans以及所有属性.这些是我完全不寻找的东西.所以:任何解决这个问题的建议都会很棒!
就在我将文档存储在ES中之前,我检查文档类型是否存在索引.如果没有,我创建一个具有给定映射的集合.映射看起来像这样
{
"analysis": {
"analyzer": {
"htmlStripAnalyzer": {
"type": "custom",
"tokenizer": "standard",
"filter": "standard",
"char_filter": [
"html_strip"
]
}
}
},
"mappings": {
"${type}": {
"dynamic_templates": [
{
"_metadata": {
"path_match": "_metadata.*",
"mapping": {
"type": "keyword"
}
}
}
],
"properties": {
"_tags": {
"type": "nested",
"dynamic": true
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
警告:忽略现有映射.这与我的意图无关.他们就在那里.
我要用文档类型替换$ {type} emails.
告诉ES不要将HTML内容编入索引是什么意思?
一个完整的测试用例:
DELETE /test
PUT /test
{
"settings": {
"analysis": {
"analyzer": {
"htmlStripAnalyzer": {
"type": "custom",
"tokenizer": "standard",
"filter": ["standard","lowercase"],
"char_filter": [
"html_strip"
]
}
}
}
},
"mappings": {
"test": {
"properties": {
"html": {
"type": "text",
"analyzer": "htmlStripAnalyzer"
}
}
}
}
}
POST /test/test/1
{
"html": "<td><tr>span<td></tr>"
}
POST /test/test/2
{
"html": "<span>whatever</span>"
}
POST /test/test/3
{
"html": "<html> <body> <h1 style=\"font-family: Arial\">Test</h1> <span>More test</span> </body> </html>"
}
POST /test/_search
{
"query": {
"match": {
"html": "span"
}
}
}
POST /test/_search
{
"query": {
"match": {
"html": "body"
}
}
}
POST /test/_search
{
"query": {
"match": {
"html": "more"
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5545 次 |
| 最近记录: |