1

我已经使用 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);

这适用于“California”或“Los”等搜索。但是当我尝试使用多个单词时,例如“Los Ang”,我得到了一个例外:

严重:servlet [spring-mvc] 在路径 [/xxx] 的上下文中的 Servlet.service() 引发异常 [请求处理失败;嵌套异常是 org.springframework.dao.InvalidDataAccessApiUsageException: CannotconstructQuery ' "los an" '。改用 epxression 或多个子句。] 根本原因 org.springframework.dao.InvalidDataAccessApiUsageException: CannotconstructQuery ' "los an"'。请改用表达式或多个子句。在 org.springframework.data.solr.core.query.Criteria.assertNoBlankInWildcardedQuery(Criteria.java:596) 在 org.springframework.data.solr.core.query.Criteria.contains(Criteria.java:230) 在 org.springframework .data.solr.core.query.Criteria.contains(Criteria.java:257) 在 org.springframework.data.solr.core.query.Criteria.contains(Criteria.java:244) 在 org.springframework.data.solr .repository.query.SolrQueryCreator.from(SolrQueryCreator.java:112) 在 org.springframework.data.solr.repository.query.SolrQueryCreator.create(SolrQueryCreator.java:56) 在 org.springframework.data.solr.repository.query .SolrQueryCreator.create(SolrQueryCreator.java:43) 在 org.springframework.data.repository.query.parser.AbstractQueryCreator.createCriteria(AbstractQueryCreator.java:

任何想法如何解决?

4

2 回答 2

2

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

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

效果很好!

感谢 Christoph 帮助解答:https ://jira.springsource.org/browse/DATASOLR-74

于 2013-05-09T16:58:14.693 回答
0

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

我不知道 的实现findByAutocompleteStartingWith,但它似乎只是在构建一个PrefixQuery,或类似的东西。该异常是由断言引发的,因此它的设计非常明确,仅用于为单字查询提供单字建议。

因此,您只能向其中传递一个单词。通常,输入的最后一个单词。

于 2013-05-08T15:43:01.090 回答