我有一个Elasticsearch实例,里面充满了包含电影和系列标题的文档。
运行此命令时:
{
"query": {
"bool": {
"must": [
{
"multi_match": {
"fields": [
"Name^2",
"SeriesName^1.5",
"Description"
],
"fuzziness": "AUTO",
"prefix_length": 2,
"query": "game"
}
}
]
}
}
}
...我得到了诸如“大游戏”,“饥饿游戏”,“战争游戏”之类的标题
但是,我希望在标题仅包含“ game”之前获得以“ game”开头的标题。
当用户搜索“游戏”时,他们希望在“模仿游戏”之前出现“权力的游戏”和“游戏改变”之类的标题。
如何使它更精确?谢谢!
答案 0 :(得分:1)
尝试以下类似方法:
{ "query": {
"prefix" : { "Name" : "game" }
}
}
请参考同一Elasticsearch Documentation
的文档为此,您的字段/属性必须被标记为关键字,请参见下面的查询。您还可以在映射中为您的字段/属性添加其他小写过滤器。
{
"settings": {
"index": {
"analysis": {
"analyzer": {
"analyzer_startswith": {
"tokenizer": "keyword",
"filter": "lowercase"
}
}
}
}
},
"mappings": {
"test_index": {
"properties": {
"Name": {
"search_analyzer": "analyzer_startswith",
"index_analyzer": "analyzer_startswith",
"type": "string"
}
}
}
}
}