我正在尝试使用elasticsearch实现一个文本搜索应用程序,该应用程序执行“开始”搜索(如match_phrase_prefix),但我也需要在分析器上应用诸如“词干器”和“停止”之类的过滤器。
下面是我想要搜索的示例文档:
棕色狐狸quickly.
我的目标是,当我搜索“棕狐”时,应用程序应该返回给我1)和3)
我尝试了关键字作为我的标记,带有“词干器”和“停止”的过滤器,它只适用于我文档中的最后一个词,例如:“棕狐跑得快”将变成“棕狐跑得快”,但我需要把整个句子托起。
发布于 2022-11-14 15:14:48
您需要应用标记化,这样您就可以对句子中的每个单词进行词干词干处理。
在settings.analysis.analyzer中,您可以添加这个自定义英语分析器:
{
"custom_english": {
"filter": [
"stopwords",
"english_possessive_stemmer",
"lowercase",
"english_stemmer"
],
"tokenizer": "standard"
}
}然后,您可以在您的字段定义中添加一个子字段,如下所示的mappings中这样:
{
"my_field": {
"type": "keyword",
"ignore_above": 8191,
"fields": {
"en": {
"analyzer": "custom_english",
"type": "text"
}
}
}
}然后您可以这样查询:
{
"query": {
"prefix": {
"my_field.en": {
"value": "brown fox"
}
}
}
}这将匹配1,3。前缀查询确保只匹配从值的开头。但是当您使用brown foxes查询时,您也会得到1,这就是词干的功能。
https://stackoverflow.com/questions/74433239
复制相似问题