如何从弹性搜索索引中排除HTML内容?

Kie*_*one 5 .net c# elasticsearch

我正在使用Elasticsearch,并使用WebRequest编写自己的包装器,因为NEST(通常的选择)莫名其妙地似乎缺乏插入项目并返回生成的ID的能力.

无论如何 - 一般方法没有问题.但是,任何HTML内容都按原样索引,即如果我<strong>test</strong>在某个字段中,则搜索"strong"查询将返回该项目.

我把它放在elasticsearch.yml中,根据我发现的随机留言板帖子:

index:
    analysis:
        analyzer:
            htmlContentAnalyzer:
                type: custom
                tokenizer: standard
                filter: standard
                char_filter: html_strip
Run Code Online (Sandbox Code Playgroud)

然后,我为我的索引"内容",项目类型"新闻"创建了一个映射:

PUT http://localhost:9200/content/news/_mapping

{
    "news" : {
        "properties" : {
            "TextContent" : {
                "type" : "string",
                "index" : "analyzed",
                "analyzer" : "htmlContentAnalyzer",
                "store" : "yes"
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

store/ yes只是为了"好玩",这都没有区别.以上给我200 OK.

但是,搜索返回相同的结果.

没有用的是弹性搜索文档似乎令人震惊.看看这个页面:

http://www.elasticsearch.org/guide/reference/api/admin-indices-put-mapping.html

它简要介绍了映射的内容,并在映射部分说明了更多细节,即此页面:

http://www.elasticsearch.org/guide/reference/mapping/

......这似乎真的太可怕了.没有提到我找到的格式/对象图 - 没有提到"属性","类型","分析器","索引"等.右侧菜单上有一些部分,例如"_index",但它们似乎把整个项目称为?那指出了哪里?

所以我的问题在两个方面:

  • 如何停止索引的HTML标记(以及我猜测的实体,属性值)? - 请注意,我仍然希望存储HTML
  • 有没有更好的弹性搜索信息/文档来源?或者我在没有超级秘密解码器眼镜的情况下看着它?

Kie*_*one 3

感谢 #elasticsearch (freenode IRC) 上的 chrismale -

搜索_all是不好的:它是用它自己的分析器索引的。对我的TextContent领域的查询特别按预期工作。

  • 或者,您可以将分析器命名为“default”,然后它将应用于包括 _all 在内的所有字段。(为此,只需在 elasticsearch.yml 文件中将“htmlContentAnalyzer:”替换为“default:”) (2认同)