【发布时间】:2015-09-21 12:13:45
【问题描述】:
在我的索引模板中,我定义了一个自定义分析器,其中包含一个停用词过滤器。见以下sn-p:
"settings": {
"index.analysis.filter.german_stemmer.type": "stemmer",
"index.analysis.filter.german_stop.type": "stop",
"index.analysis.filter.german_stemmer.language": "light_german",
"index.analysis.filter.german_keywords.keywords.0": "",
"index.analysis.filter.german_stop.stopwords": "_german_",
"index.analysis.filter.german_keywords.type": "keyword_marker",
"index.analysis.analyzer.unigram.filter.0": "lowercase",
"index.analysis.analyzer.unigram.filter.1": "german_stop",
"index.analysis.analyzer.unigram.filter.2": "german_keywords",
"index.analysis.analyzer.unigram.filter.3": "german_normalization",
"index.analysis.analyzer.unigram.filter.4": "german_stemmer",
"index.analysis.analyzer.unigram.tokenizer": "standard",
}
我还在textBody 字段上定义了unigram 的映射。接下来,我尝试通过查看前 100 个文档计数来获取最常用的单词:
"aggs":{
"wordcounts":{
"terms":{
"field" : "textBody",
"size" : 100
}
}
}
不幸的是,在这种方法中,结果中还包含停用词。这个停用词的文档数很高,但词频为零(通过script field tf() 跟进查询)。有没有办法从我的聚合结果中删除停用词?
P.S.:重要术语查询还会在我的结果集中提供停用词。
德语停用词的示例:“viel”、“muss”、“soll”、“war”、“weg”、“den”、...
我正在使用 elasticsearch-groovy:1.7.0,它建立在:
- 弹性搜索:1.7.0
- lucene-core:4.10.4
更新:
我发现,有一些词形被简化为上面提到的词。例如,“muss”在文本中的词形如下:“muss”、“muesse”、“muessen”、“muß”、“muße”、“müsse”和“müsser”。这些词都被简化为词干“muss”。如果我查询“muss”这个词,那么我得到的结果为零,因为它被停用词过滤器过滤了。
在某些查询(例如 must_not 过滤器)中,甚至可以查询“muss”,结果我得到所有其他单词形式的聚合计数,然后是“muss”。
【问题讨论】:
-
您运行的是哪个 elasticsearch 和 lucene 版本?我怀疑旧的 lucene 版本没有包含你所有的停用词
-
elasticsearch 1.7.0,lucene 4.10.4
标签: elasticsearch