当前位置: 首页 > 知识库问答 >
问题:

使用Solr自动完成

郑帅
2023-03-14

我已经使用Spring Data Solr索引了一个位置数据库。我有以下字段:

   <field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" /> 
   <field name="name" type="text_ws" indexed="true" stored="true"/>
   <field name="autocomplete" type="lowercase" indexed="true" stored="false"/>

我试图实现一个自动完成功能。我的ajax调用由一个控制器处理,该控制器调用一个存储库:

List<POISearch> findByAutocompleteStartingWith(String autocomplete, Pageable pageable);

这适用于像“加利福尼亚”或“洛杉矶”这样的搜索。但是当我尝试像“洛杉矶”这样的多个单词时,我会得到一个例外:

严重:Servlet。路径为[/xxx]的上下文中servlet[spring mvc]的服务()引发异常[请求处理失败;嵌套异常为org.springframework.dao.InvalidDataAccessApiUsageException:无法构造查询''los an'。请改用ePxPression或多个子句。]与根本原因组织。springframework。刀。InvalidDataAccessApiUsageException:无法构造查询“los an”。改用eXpression或mullitple子句。在org。springframework。数据索尔。果心查询标准org上的assertNoBlankInWildcardedQuery(Criteria.java:596)。springframework。数据索尔。果心查询标准在org上包含(Criteria.java:230)。springframework。数据索尔。果心查询标准在org上包含(Criteria.java:257)。springframework。数据索尔。果心查询标准在org上包含(Criteria.java:244)。springframework。数据索尔。存储库。查询SolrQueryCreator。来自(SolrQueryCreator.java:112)org。springframework。数据索尔。存储库。查询SolrQueryCreator。在org上创建(SolrQueryCreator.java:56)。springframework。数据索尔。存储库。查询SolrQueryCreator。在org上创建(SolrQueryCreator.java:43)。springframework。数据存储库。查询解析器。抽象查询生成器。org上的createCriteria(AbstractQueryCreator.java:109)。springframework。数据存储库。查询解析器。抽象查询生成器。org上的createQuery(AbstractQueryCreator.java:88)。springframework。数据存储库。查询解析器。抽象查询生成器。org上的createQuery(AbstractQueryCreator.java:73)。springframework。数据索尔。存储库。查询PartTreeSolQuery。在org上创建查询(PartTreeSolrQuery.java:46)。springframework。数据索尔。存储库。查询AbstractSolrQuery。在org上执行(AbstractSolrQuery.java:95)。springframework。数据存储库。果心支持RepositoryFactorySupport$QueryExecutorMethodInterceptor。在org调用(RepositoryFactorySupport.java:312)。springframework。aop。框架ReflectiveMethodInvocation。在org上继续(ReflectiveMethodInvocation.java:172)。springframework。交易拦截器。交易接受者1美元。org上的proceedWithInvocation(TransactionInterceptor.java:96)。springframework。交易拦截器。TransactionSpect支持。在org上调用Withintransaction(TransactionSpectSupport.java:260)。springframework。交易拦截器。交易接收器。在org调用(TransactionInterceptor.java:94)。springframework。aop。框架ReflectiveMethodInvocation。在org上继续(ReflectiveMethodInvocation.java:172)。springframework。刀。支持PersistenceExceptionTranslationInterceptor。在org调用(PersistenceExceptionTranslationInterceptor.java:155)。springframework。aop。框架ReflectiveMethodInvocation。在org上继续(ReflectiveMethodInvocation.java:172)。springframework。aop。框架JdkDynamicAopProxy。在$Proxy44处调用(JdkDynamicAopProxy.java:204)。findByAutocompleteContaining(未知源)

有什么办法解决吗?

共有2个答案

唐哲
2023-03-14

通常,您不能对短语执行通配符查询,这就是它在这里发生的情况。

我不知道findByAuto完成eStartingBy的实现,但它似乎只是构建一个Prefix Query,或者类似的东西。该异常是由断言引发的,因此它被非常明确地设计为只为单个单词查询提供单个单词建议。

因此,您只能在其中传递一个单词。一般来说,最后一个字是输入的。

胡墨竹
2023-03-14

使用最新版本的spring data solr,您可以执行以下操作:

List<POISearch> results = repository.findByAutocompleteStartingWith(Arrays.asList("los", "ange"));

很好!

感谢克里斯托夫帮助回答:https://jira.springsource.org/browse/DATASOLR-74

 类似资料:
  • 问题内容: 也许您可以解决一些Ajax问题。 我有AUTO COMPLETE代码-我输入城市名称,该代码会自动为我完成城市名称,还获取城市ID,并应将其放入隐藏的输入字段中(名称=“ cityID”)…但它没有做到这一点。 你能告诉我为什么吗? html代码: 服务器端(仅输出): 脚本: 您可以在这里找到完整的JS: 问题答案: 尝试对ajax_response_city使用div而不是span

  • 问题内容: 目前,我必须去然后做: 如何使它在启动时自动启动? 我在共享Linux服务器上。 问题答案: 如果您具有计算机的超级用户访问权限,则可以根据系统的初始化流程(初始化脚本,systemd等)采用多种方法来执行此操作。 但是,如果您没有root用户,则可以采用一种干净且一致的方式在重新启动时执行程序。 首先,找出Java在您的计算机上的位置。下面的命令将告诉您它在哪里: 然后,将以下代码粘

  • 问题内容: 好吧,我一直在为此绞尽脑汁(这太糟糕了),但是我一直尝试阅读我所能而且仍然无法使它起作用的内容。 试图用jQuery UI做自动完成 我的json看起来像这样 我正在尝试将此信息用作自动完成的来源。我得到的响应对象很好,我很难以正确的格式获得它,因此我可以将“ ”放在与“值”相关联的隐藏字段中,该字段需要显示为“值”的一部分落下。 尝试了一百万种不同的方法,但最近的尝试却在下面 请多谢

  • 问题内容: 我有一个文本框,当我输入一个字母说“ s”时,它会显示结果列表(例如google搜索)。 我正在使用带有Java的最新Selenium Webdriver。 我努力了 即使在每个步骤之后都添加了等待,这些都不起作用。 有什么建议? 谢谢。 更新:- 更新2:- 更新3:-我尝试使用Selenium 1,fireevent方法通过将参数作为’keydown’传递而起作用。目前,这应该是一

  • 问题内容: 想象一个具有以下数据的json文件: 我希望使用jQuery的自动完成方法,能够将 颜色 显示为选项,以选择并在输入上插入 值 。 以上不需要介绍。用于选择颜色,具有 颜色 值和具有 值 value的选择器。 编辑: 我有此JSON数据: 和这个HTML: 而这个jQuery: 我遵循安德鲁的回答,它提示我选择数据,但是如果我发出警报和变量,它会显示“未定义”。我想念什么? Edit2

  • 问题是我使用的是PhpStorm IDE。Laravel项目由nwidart/laravel模块管理。 但是,PhpStorm不处理基本的Laravel函数。例如:,对于自己的模型: 在\ Modules \ Companies \ Models \ Companies _ addresses中找不到方法“findorfail” 我执行了以下操作以启用自动完成: 安装https://github.