繁体   English   中英

Elasticsearch 单字查询不返回结果

[英]Elasticsearch not returning result for single word query

我有一个基本的 Elasticsearch 索引,其中包含各种帮助文章。 用户可以在我的 Python/Django 应用程序中搜索它们。

该索引具有以下映射:

{
    "mappings": {
        "properties": {
            "body": {
                "type": "text"
            },
            "category": {
                "type": "nested",
                "properties": {
                    "category_id": {
                        "type": "long"
                    },
                    "category_title": {
                        "fields": {
                            "keyword": {
                                "ignore_above": 256,
                                "type": "keyword"
                            }
                        },
                        "type": "text"
                    }
                }
            },
            "title": {
                "type": "keyword"
            },
            "date_updated": {
                "type": "date"
            },
            "position": {
                "type": "integer"
            }
        }
    }
}

我基本上希望用户能够搜索查询并获得与文章标题或类别匹配的任何结果。

假设我在“您的帐户”类别中有一篇名为“我不记得我的密码”的文章。

如果我准确地搜索文章标题,我会看到结果。 如果我准确地搜索类别标题,我也会看到结果。

但如果我只搜索“密码”,我什么也得不到。 我需要在我的设置/查询中进行哪些更改才能使该查询(或类似的非精确查询)也返回结果?

我的查询看起来像:

{
    "query": {
        "bool": {
            "should": [{
                    "multi_match": {
                        "fields": ["title"],
                        "query": "password"
                    }
                },
                {
                    "nested": {
                        "path": "category",
                        "query": {
                            "multi_match": {
                                "fields": ["category.category_title"],
                                "query": "password"
                            }
                        }
                    }
                }
            ]
        }
    }
}

我已经阅读了其他问题并尝试了各种设置,但到目前为止还没有运气。 在准备字段方面,我在索引时没有做任何特别的事情,所以我不知道这是否值得一看。 我只是使用elasticsearch-dsl默认值。

解决方案是将标题字段重新索引为文本而不是关键字。 后者只允许精确匹配。

感谢 LeBigCat在评论中指出这一点。 他们没有将其发布为答案,因此我代表他们这样做以提高知名度。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM