gpt4 book ai didi

elasticsearch - ElasticSearch-从热门单词中过滤停用词

转载 作者:行者123 更新时间:2023-12-02 23:25:56 27 4
gpt4 key购买 nike

我有一个要编制索引的文档 list ,如下所示:

        ElasticIndex.CreateIndex(IndexName, _ => _
.Mappings(__ => __
.Map<AlbumMetadata>(
M => M.AutoMap()
.Properties(P => P.Text(T => T.Name(N => N.Keywords)
.Analyzer("stop")
.Fields(F => F.Keyword(K => K.Name("keywords"))))))));

在我的类AlbumMetaData中,关键字字段是一个列表:
    [Keyword]
public List<string> Keywords { get; set; }

当我想检索热门术语时,我会执行以下查询(您可以忽略类别和类型,它们与问题无关):
        var Match = Driver.Search<AlbumMetadata>(_ => _
.Query(Q => Q
.Term(P => P.Category, (int)Category) && Q
.Term(P => P.Type, (int)Type))
.Source(F => F.Includes(S => S.Fields(L => L.Keywords)))
.Aggregations(A => A
.Terms("Tags", T => T
.Field(E => E.Keywords)
.Size(Limit)
)
));

var Tags = Match.Aggs.Terms("Tags").Buckets.ToDictionary(K => K.Key, V => V.DocCount);

问题是在输出中,我得到了一些停用词以及一些符号,例如/-&|

我究竟做错了什么?

编辑:
为了澄清问题,这是我要实现的目标:

我有带有标题(完整的英语句子)和标签(单个单词的列表,有时一个标签是两个单词的标签)的文档。

我需要能够执行搜索,该搜索将根据标题和标签(并且最好使用词干,忽略复数等)来查找文档。
我还需要提取热门单词列表。关键字列表是标题中所有单词和标签列表中所有条目的串联。

在这种情况下,我创建索引的方式合适吗?另外,我进行汇总的方法是否正确?

最佳答案

有几件事:

  • 创建索引时,映射上的.AutoMap()将根据POCO属性类型和应用于它们的属性来推断Elasticsearch字段数据类型。然后,.Properties()覆盖所有这些推断的映射。因此,映射到Keywords的最终结果是应用了text分析器的 stop 数据类型字段,以及设置为 multi-field 数据类型的"keywords""keywords.keywords"子字段(可通过keyword查询)。
  • 应用了"keywords"分析器,聚合在text stop字段上运行。 stop分析器uses English stop words by default,但是您可以通过在索引中定义自定义stop分析器,将stop分析器配置为其他停用词。 stop分析器不会删除/-&|之类的符号。
  • 对于术语聚合,您通常希望获取字段的逐字记录聚合,您可以通过使用聚合中的"keywords.keywords"字段在映射中获得该聚合。您可以将 normalizer 应用于类似于分析器的keyword字段,但它只会产生一个 token 。这是因为keyword字段使用 doc_values ,它是磁盘上的柱状数据结构,适合于执行良好的大规模聚合。
    您也可以在进行操作时在text字段上运行聚合,但是还需要启用 fielddata 并了解其工作方式。 text字段不能使用doc_values
  • 关于elasticsearch - ElasticSearch-从热门单词中过滤停用词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43074878/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com