jQuery自动完成和lucene的问题

Posted

技术标签:

【中文标题】jQuery自动完成和lucene的问题【英文标题】:Problem with jQuery autocomplete and lucene 【发布时间】:2011-03-18 21:34:51 【问题描述】:

我在 jsp 中使用 jQuery 自动完成功能并从 servlet 中获取我的搜索结果,其中针对应该自动完成的给定术语搜索 Lucene 索引。 这就是jsp中自动完成的代码:

$(document).ready(function() 
    $("#QRY_ItemQuickSearch_enc").autocomplete("<%=autoSuggestAction%>",
        
            onItemSelect:selectItem,
            minChars:3,
            maxItemsToShow:10,
            cacheLength:10,
            matchSubset:10
        
    );
);

Servlet 由表达式调用:autoSuggestAction。

到目前为止没问题。

我的索引非常大,如果我使用 Lucene 找不到任何内容的特殊术语(例如:123),则该函数不会显示任何内容(如所愿)。如果我想进一步输入字符“4”,那么完整的搜索词现在是“1234”,我也没有得到任何结果(如预期的那样)。注意:搜索功能重复。

现在我的具体问题:

如果我在索引中键入一千次(或更多次)的搜索字符串,Lucene 将无法处理此查询并抛出“TooManyClausesException”。我知道我可以增加布尔查询的值,但这会消耗太多内存。相反,我显示一个结果,该结果被写回输入字段并显示用户进一步定义搜索字符串。但是如果我现在在输入字段中键入一个字符,则不会再次调用自动完成方法。 在这种情况下有人可以帮助我吗?

【问题讨论】:

我解决了这个问题。我在jquery.autocomplete的源代码中编辑了“requestData(q)”函数。我将 cmets 插入到 if (data) receiveData(q, data);现在我的搜索引擎显示了想要的结果。赛亚 很高兴您找到了解决方案。您应该将其作为答案发布并接受。否则这个问题看起来没有解决。 【参考方案1】:

原请求者通过编辑jquery.autocomplete源码中的“requestData(q)”函数解决了这个问题。

他/她评论了这行:

    if (data)  receiveData(q, data);  

现在搜索引擎会显示所需的结果。

【讨论】:

以上是关于jQuery自动完成和lucene的问题的主要内容,如果未能解决你的问题,请参考以下文章

如何禁用 chrome / jquery 的自动完成和自动填充

淘汰赛和 jQuery 自动完成

生成自动完成功能 Angular 和 Jquery

JQuery 自动完成结果

jQuery 自动完成 + AngularJS 的问题

如何实现类似于 jQuery UI 自动完成的 Dojo 自动完成?