我在Rails应用程序中使用Elasticsearch&Typeahead执行自动完成。我从这里得到了主意
https://shellycloud.com/blog/2013/10/adding-search-and-autocomplete-to-a-
rails-app-with-elasticsearch
我已经正确配置了elasticsearch自动完成功能,因为当我直接通过浏览器访问它时,它可以工作。但是,当我尝试使用typeahead从自动完成查询中调用显示数据时,它甚至不会在调试器中触发。这是我的表单和javascript,其中称为typeahead
形成
<script>
$('#autcomplete_search').typeahead({
highlight: true
},
{
name: 'apple_game',
remote: "/search/autocomplete?query=%QUERY"
});
</script>
<h1>Keyword</h1>
<form action="/search/keyword">
<div>
<%= text_field_tag :query, params[:query], class: "form-control", id: "autcomplete_search" %>
<br/>
<br/>
</div>
<div>
<input type="submit">/</input>
</div>
</form>
控制者
def autocomplete
es = ESClient.get_client
games = es.suggest index: 'games',
body: {
apple_game: {
text: params[:keyword],
completion: {
field: "title"}
}
}
render json: games
end
控制器方法的示例浏览器结果
{
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"apple_game": [
{
"text": "ma",
"offset": 0,
"length": 2,
"options": [
{
"text": "Macabre Mysteries: Curse of the Nightingale Collector's Edition HD",
"score": 1
},
{
"text": "Mad Cop - Police Car Race and Drift (Ads Free)",
"score": 1
},
{
"text": "Mad Freebording (Snowboarding)",
"score": 1
},
{
"text": "Mad Merx: Nemesis",
"score": 1
},
{
"text": "Mad River Whitewater Kayak Rush",
"score": 1
}
]
}
]
}
编辑 我每当运行typeahead时也注意到控制台中出现以下错误
Uncaught Error: missing source
好的,我认为您有两个问题。
问题1:
您看起来像是在使用10.0版之前的预输入API。要使用远程,您必须使用Bloodhound或类似的东西来获取结果。
我最近实现了此功能,这是一个有效的示例:
var $vartypeahead = $(yourjqueryelement);
var engine = new Bloodhound({
name: 'typeaheads',
remote: {"url":'/search/typeahead?q=%QUERY'},
datumTokenizer: function(d) { return d;},
queryTokenizer: function(d) { return d;}
});
engine.initialize();
$vartypeahead.typeahead({
"minLength": 2,
"highlight": true
},
{
"source": engine.ttAdapter()
});
我确实必须对所做的事情稍作修改;我在前端使用骨干并将上面的内容拼接到其中(为此,我在typeahead项目中拥有PR)
问题二
就ES而言,我不确定您的映射是否正确,通常您用于预输入项目的映射将如下所示:
{
"settings": {
"analysis": {
"filter": {
"autocomplete_ngram": {
"max_gram": 24,
"min_gram": 2,
"type": "edge_ngram"
}
},
"analyzer": {
"autocomplete_index": {
"filter": [
"lowercase",
"autocomplete_ngram"
],
"tokenizer": "keyword"
},
"autocomplete_search": {
"filter": [
"lowercase"
],
"tokenizer": "keyword"
}
}
},
"index": {
"number_of_shards": 20,
"number_of_replicas": 1
}
},
"mappings": {
"yourtype": {
"properties": {
"title": {
"type": "multi_field",
"fields": {
"title_edgengram": {
"type": "string",
"index": "analyzed",
"index_analyzer": "autocomplete_index",
"search_analyzer": "autocomplete_search"
},
"title": {
"type": "string",
"index": "not_analyzed"
}
}
}
}
}
}
}
我有一个ImageView,下面有一个EditText。我希望在查看ImageView时能够写入EditText。EditText此时不可见。有人知道如何实现吗?我用TextWatcher试了一下,但TextChanged后的滚动不起作用。 xml如下所示:
问题内容: 我有一个MySQL数据库,正在使用。 由于某些原因,我无法使事务正常运行。如果我打电话,它不会回滚。 示例代码: 结果是将另一行添加到myTable。谁能想到一个原因? 问题答案: 您使用的是myIsam还是innodb?据我所知,它仅适用于innodb
应该修复头部,我不想要整体滚动条,所以我在主体标记中给出了, 我需要垂直滚动条在我的包装div。我怎么才能修好这个? HTML
我有带有三个片段的视图页面管理器,其中一个是带有滚动视图的框架布局: 如果我在按钮上滑动,它会工作。但是如果我在滚动视图上滑动,它就不起作用了,只有向上/向下滚动起作用。 编辑:我试图覆盖滚动视图的OnTouchEvent: 现在我可以禁用滚动,但滑动仍然不起作用,如果X点之间的差异超过40,我将事件传递给viewpager,但viewpager的onTouchListener没有收到此事件;
问题内容: 加载活动后,我想滚动到RecyclerView列表的底部。 引发关于RecyclerView中不受支持的异常,并且似乎没有任何作用。 在上面的代码块之后,我添加了 这不起作用。中有30个元素。 问题答案: 只需进行设置,以使LLM可以从头开始布局项目。 两者之间的区别在于,将视图设置为显示最后一个元素,布局方向将保持不变。(因此,在从左到右的水平Recycler视图中,将显示最后一个元
问题内容: 我正在开发一个应用程序。在我的应用程序中,我正在使用listview显示json中的数据。所有数据完美显示。但是我想要的是先显示10个对象,然后显示加载项,然后显示其余10个。我的json响应如下。 Interestsent.java EndlessScroolListener.java CustomAdapterSent.java 公共类CustomAdapterSent扩展Base