【问题标题】:elasticsearch mapping for products产品的弹性搜索映射
【发布时间】:2014-08-26 23:18:23
【问题描述】:

我想为我的在线购物网站实现一个搜索引擎
我测试了一些分析器,但我没有看到它们之间的显着差异。我使用了雪球、ngram、标准分析器
我不知道哪个分析仪适合产品名称并给我最好的结果,我也不知道我应该使用哪个搜索查询
这是我的映射架构

{
    "settings": {
        "analysis": {
            "analyzer": {
                "autocomplete": {
                    "type": "custom",
                    "tokenizer": "standard",
                    "filter": ["standard", "lowercase", "stop", "kstem", "ngram"]
                }
            }
        }
    }
    ,
    "mappings": {
        "products": {
            "properties": {
                "id": {
                    "type": "integer",
                    "index": "no"
                },
                "name": {
                    "type": "multi_field",
                    "fields": {
                        "name": {
                            "type": "string"
                        },
                        "snowball": {
                            "type": "string",
                            "analyzer": "snowball"
                        },
                        "autocomplete": {
                            "analyzer": "autocomplete",
                            "type": "string"
                        }
                    }
                }
            }
        }
}

和搜索查询,我不知道使用匹配查询是否适合我的用例

{
        "query": {
            "multi_match": {
                "fuzziness":2,
                "type" : "phrase",
                "query": "term",
                "fields": ["name", "name.snowball",
                    "name.autocomplete"]
                }
        }
}

【问题讨论】:

    标签: search elasticsearch search-engine


    【解决方案1】:

    使用Analyze API 查看在您使用的不同分析器的 Lucene 索引中生成了哪些令牌。查询“术语”不是一个很好的测试示例,请使用更长的时间。

    您的搜索有什么要求?

    不要使用多重匹配查询来测试结果,在单个搜索中测试分析器。

    curl -XGET 'http://localhost:9200/yourindex/_search?q=name:yourSearchTerm'
    
    curl -XGET 'http://localhost:9200/yourindex/_search?q=name.snowball:yourSearchTerm'
    
    curl -XGET 'http://localhost:9200/yourindex/_search?q=name.autocomplete:yourSearchTerm'
    

    有关自动完成功能,请查看 Completion Suggesster API

    此外,Snowball 词干分析器非常激进,可能会产生不良结果,您可能需要使用更轻的词干分析器。

    【讨论】:

    • 我没有什么特殊要求,只是一个搜索引擎来索引所有产品名称,那么你认为哪个分析器更好?你说我不使用 match_query?那么你是哪个查询推荐适合我的?
    • 为了测试我所说的查询,不要使用 multi_match 查询,因为您希望看到搜索之间的任何差异。如果您没有任何特殊要求,只需使用标准分析器(默认),并在需要时从中构建。如果您需要搜索多个字段,请使用 multi_match,或查看匹配查询elasticsearch.org/guide/en/elasticsearch/reference/current/…
    • 但我希望搜索引擎功能强大。对于搜索您推荐哪个查询?模糊、匹配、匹配+模糊,什么?
    • 在不了解您的确切用例和搜索功能的情况下很难推荐一种查询类型。所以正如@DanTuffery 建议的那样,从标准分析器开始,在第一步使用简单的匹配查询。然后慢慢改进您的搜索。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-25
    • 2016-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多