ElasticSearch edge_ngram不使用单个字符

时间:2016-11-21 17:16:42

标签: elasticsearch autocomplete

这是我设置的索引:

    $dsl = array(
        'index' => array(
            'analysis' => array(
                'analyzer' => array(
                    'autocomplete' => array(
                        'type' => 'custom',
                        'tokenizer' => 'standard',
                        'filter' => array(
                            'lowercase',
                            'autocomplete_filter'
                        )
                    )
                ),
                'filter' => array(
                    'autocomplete_filter' => array(
                        'type' => 'edge_ngram',
                        'min_gram' => 1,
                        'max_gram' => 20
                    )
                )
            )
        )
    );

以下是字段属性:

public static $optimizedGenericMapping = array(
    "_source" => array(
        "enabled" => true
    ),
    "properties" => array(
        "primaryText" => array(
            "type" => "string",
            "analyzer" => "autocomplete",
            "search_analyzer" => "standard"
        ),
        "secondaryText" => array(
            "type" => "string",
            "analyzer" => "autocomplete",
            "search_analyzer" => "standard"
        ),
        "contentTitle" => array(
            "type" => "string"
        ),
        "contentSubtitle" => array(
            "type" => "string"
        ),
        "contentLocation" => array(
            "type" => "geo_point"
        )
    )
);

这是我的搜索查询:

        $queryDsl = array(
            'multi_match' => array(
                'query' => $searchQuery,
                'fields' => $primaryOnly ? array('primaryText') : array('primaryText^3', 'secondaryText'),
                'type' => 'phrase_prefix'
            )
        );

现在如果我搜索以下内容:“San Di”,我得到的结果没问题。但是,如果我搜索:“San D”,我没有得到任何结果。 (搜索圣地亚哥市)

我知道它必须是简单的,但它让我发疯,哈哈。

最后请注意,我正在使用ElasticSearch 5.0。谢谢!

0 个答案:

没有答案