这是我设置的索引:
$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。谢谢!