自动完成“智能”

时间:2014-02-14 00:05:10

标签: elasticsearch

我应该建立一个自动完成" smart"从某种意义上说,每一个结果都必须在一系列信息背后。

例如:

我正在寻找"博洛尼亚"我必须运行一个查询(或多个,我正在寻找一种尽可能少的方法),其中"博洛尼亚"在字段中搜索" name"," locality"和"地区"。

如果找到了,有必要计算博洛尼亚"中有多少结构。

这是数据库架构:

index:   
analysis:   
    analyzer:
        custom_search_analyzer:
            type: custom
            tokenizer: standard
            filter   : [standard, snowball, lowercase, asciifolding]
        custom_index_analyzer:
            type: custom
            tokenizer: standard
            filter   : [standard, snowball, lowercase, asciifolding, custom_filter]
    filter:
        custom_filter:
            type: edgeNGram
            side: front
            min_gram: 1
            max_gram: 20

{
 "structure": {
   "properties": {
     "name": {"type": "string", "search_analyzer": "custom_search_analyzer", "index_analyzer": "custom_index_analyzer"},
     "locality": {"type": "string", "search_analyzer": "custom_search_analyzer", "index_analyzer": "custom_index_analyzer"},
     "province": {"type": "string", "search_analyzer": "custom_search_analyzer", "index_analyzer": "custom_index_analyzer"},
     "region": {"type": "string", "search_analyzer": "custom_search_analyzer", "index_analyzer": "custom_index_analyzer"}
   }
 }
}

显然我可以在服务器端执行此操作,例如使用带循环的php,但答案非常慢,并且对弹性搜索的所有速度感到沮丧。

此时我想知道如何做到这一点。

1 个答案:

答案 0 :(得分:0)

我成功使用了this guide,它解决了您提到的多字段要求。