Elasticsearch中的简单自动完成功能

时间:2015-11-04 08:20:28

标签: elasticsearch

是否可以在Elasticsearch中使用简单的自动填充功能?

我需要在搜索输入中输入单词的开头,我希望elasticsearch能够找到以它开头的所有单词。我希望Elasticsearch能够搜索我的类型中的所有字段(Post,其中包含TitleBodyTags)。

this example中,我需要添加特殊建议字段,即TitleSuggestBodySuggest等,并指定输入和输出逻辑。

它还会返回Posts的列表,而我只需要单词。

2 个答案:

答案 0 :(得分:0)

据我所知,我会这样做:

 {
    "query" : {
        "dis_max" : {
            "tie_breaker" : 0,
            "boost" : 1,
            "queries" : [{
                    "wildcard" : {
                        "title" : "searchme*"
                    }
                }, {
                    "wildcard"
                     : {
                        "body" : "searchme*"
                    }
                }, {
                    "wildcard" : {
                        "tags" : "searchme*"
                    }
                }
            ]
        }
    },
    "aggs" : {
        "title" : {
            "terms" : {
                "field" : "title",
                "size" : 10
            }
        },
        "body" : {
            "terms" : {
                "field" : "body",
                "size" : 10
            }
        },
        "tags" : {
            "terms" : {
                "field" : "tags",
                "size" : 10
            }
        }
    }
 }

它搜索所有以" searchme"开头的数据。在字段中:标题,正文,标签,并返回每个10个术语的列表。

还有弹性自动完成但我从未使用它: https://www.elastic.co/guide/en/elasticsearch/guide/current/_index_time_search_as_you_type.html

答案 1 :(得分:0)

根据弹性问题跟踪器的一篇文章,也许您应该尝试这样的查询:

.Query(q => 
  q.Text(tq => tq                                              
    .OnField(t => t.MyField1.Suffix("autocomplete"))
    .QueryString(searchString)
  )                    
  && q.Text(tq => tq                                              
    .OnField(t => t.MyField2.Suffix("autocomplete"))
    .QueryString(searchString)
  )    
)

更多信息: Computer colour is broken