我想在ElasticSearch中修改More Like This查询的默认分析器,以便忽略停用词(最好不要定义它们)。为了尝试这一点,我使用explain
功能构建了一个查询,我希望stop analyzer(Stop
)如下所示,
{"search":{"size":1, "fields":["our_id"],"explain":true,"query":{
"mlt":{"analyzer": "Stop", "docs":[{"_id":"99999999"}],
"fields":["text_for_matching"]}} }}
然而,MLT似乎没有解析我的分析器(因为我可以使用任何我喜欢的东西并且没有错误或改变),因此我看到停止词仍然包含在根据{{的相似度计算中1}},explain
如何正确地使用分析仪参数化MLT,然后在搜索中忽略停用词?或者我是否需要更改初始索引以获得我想要的行为?
感谢您的帮助。
答案 0 :(得分:1)
要实现此目的,您需要将like选项与per_field_analyzer
:
{
"size": 1,
"fields": [
"our_id"
],
"explain": true,
"query": {
"mlt": {
"like": [
{
"_type": "test",
"_id": 99999999,
"per_field_analyzer": {
"text_for_matching": "stop"
}
}
],
"fields": [
"text_for_matching"
]
}
}
}