Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在自定义弹性搜索查询java中使用术语查询?_Java_Spring Boot_Spring Data_<img Src="//i.stack.imgur.com/A3TTx.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">spring Data Elasticsearch - Fatal编程技术网 spring-data-elasticsearch,Java,Spring Boot,Spring Data,spring Data Elasticsearch" /> spring-data-elasticsearch,Java,Spring Boot,Spring Data,spring Data Elasticsearch" />

如何在自定义弹性搜索查询java中使用术语查询?

如何在自定义弹性搜索查询java中使用术语查询?,java,spring-boot,spring-data,spring-data-elasticsearch,Java,Spring Boot,Spring Data,spring Data Elasticsearch,我想在弹性搜索中根据值数组搜索字段。我正在用java编写自定义术语查询,但每次都失败 代码- @Query("{ \"bool\" : { \"must\" : [\t{ \"term\" : {\"userId\" : ?0 } },\t{ \"terms\" : { \"language\" : ?1 } } ] } }") List<PostElastic> findByProviderIdAndLanguagesPostOrderLessThanFromId(Long pro

我想在弹性搜索中根据值数组搜索字段。我正在用java编写自定义术语查询,但每次都失败

代码-

@Query("{ \"bool\" : { \"must\" : [\t{ \"term\" : {\"userId\" : ?0 } },\t{ \"terms\" : { \"language\" : ?1 } } ] } }")
List<PostElastic> findByProviderIdAndLanguagesPostOrderLessThanFromId(Long providerId, List<String> languages, Long fromTimestamp,Pageable pageable);
我不能使用术语查询,因为数组大小是可变的,所以无法检查每个元素 当我使用postman直接在弹性搜索上运行查询时,它可以工作

如果我写了任何错误的查询,我无法在线找到任何源

根据,如果您计划使用字符串参数,您必须自己添加双引号:

例54。使用
@query
注释在方法处声明查询


实际上,您需要使用以下格式的完整格式字符串:@Query(“{bool\”:{must\”:[\t{“term\”:{“userId\”:?0}}、\t{“terms\”:{“language\”:[?1]}]}})List findbprovidedLanguagesPostorderlessThanFromId(Long providerId,string languages,Long-fromTimestamp,Pageable);languages=“en,hi”它不能传递数组
java.io.IOException: Unrecognized token 'en': was expecting ('true', 'false' or 'null')
at [Source: [B@20502fa2; line: 1, column: 86]
at com.fasterxml.jackson.core.JsonParser._constructError(JsonParser.java:1702) ~[jackson-core-2.9.6.jar:2.9.6]
at com.fasterxml.jackson.core.base.ParserMinimalBase._reportError(ParserMinimalBase.java:558) ~[jackson-core-2.9.6.jar:2.9.6]
at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._reportInvalidToken(UTF8StreamJsonParser.java:3528) ~[jackson-core-2.9.6.jar:2.9.6]
at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._handleUnexpectedValue(UTF8StreamJsonParser.java:2686) ~[jackson-core-2.9.6.jar:2.9.6]
at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._nextTokenNotInObject(UTF8StreamJsonParser.java:878) ~[jackson-core-2.9.6.jar:2.9.6]
at com.fasterxml.jackson.core.json.UTF8StreamJsonParser.nextToken(UTF8StreamJsonParser.java:772) ~[jackson-core-2.9.6.jar:2.9.6]
at org.elasticsearch.common.xcontent.json.JsonXContentParser.nextToken(JsonXContentParser.java:55) ~[elasticsearch-5.6.10.jar:5.6.10]
at org.elasticsearch.index.query.TermsQueryBuilder.parseValues(TermsQueryBuilder.java:391) ~[elasticsearch-5.6.10.jar:5.6.10]
at org.elasticsearch.index.query.TermsQueryBuilder.fromXContent(TermsQueryBuilder.java:356) ~[elasticsearch-5.6.10.jar:5.6.10]
at org.elasticsearch.search.SearchModule.lambda$registerQuery$10(SearchModule.java:763) ~[elasticsearch-5.6.10.jar:5.6.10]
at org.elasticsearch.common.xcontent.NamedXContentRegistry.parseNamedObject(NamedXContentRegistry.java:143) ~[elasticsearch-5.6.10.jar:5.6.10]
at org.elasticsearch.common.xcontent.support.AbstractXContentParser.namedObject(AbstractXContentParser.java:402) ~[elasticsearch-5.6.10.jar:5.6.10]
at org.elasticsearch.index.query.QueryParseContext.parseInnerQueryBuilder(QueryParseContext.java:122) ~[elasticsearch-5.6.10.jar:5.6.10]
at org.elasticsearch.index.query.BoolQueryBuilder.fromXContent(BoolQueryBuilder.java:356) ~[elasticsearch-5.6.10.jar:5.6.10]
at org.elasticsearch.search.SearchModule.lambda$registerQuery$10(SearchModule.java:763) ~[elasticsearch-5.6.10.jar:5.6.10]
at org.elasticsearch.common.xcontent.NamedXContentRegistry.parseNamedObject(NamedXContentRegistry.java:143) ~[elasticsearch-5.6.10.jar:5.6.10]
at org.elasticsearch.common.xcontent.support.AbstractXContentParser.namedObject(AbstractXContentParser.java:402) ~[elasticsearch-5.6.10.jar:5.6.10]
at org.elasticsearch.index.query.QueryParseContext.parseInnerQueryBuilder(QueryParseContext.java:122) ~[elasticsearch-5.6.10.jar:5.6.10]
at org.elasticsearch.index.query.WrapperQueryBuilder.doRewrite(WrapperQueryBuilder.java:167) ~[elasticsearch-5.6.10.jar:5.6.10]
at org.elasticsearch.index.query.AbstractQueryBuilder.rewrite(AbstractQueryBuilder.java:263) ~[elasticsearch-5.6.10.jar:5.6.10]
at org.elasticsearch.search.builder.SearchSourceBuilder.rewrite(SearchSourceBuilder.java:879) ~[elasticsearch-5.6.10.jar:5.6.10]
at org.elasticsearch.search.internal.ShardSearchLocalRequest.rewrite(ShardSearchLocalRequest.java:244) ~[elasticsearch-5.6.10.jar:5.6.10]
at org.elasticsearch.search.internal.ShardSearchTransportRequest.rewrite(ShardSearchTransportRequest.java:171) ~[elasticsearch-5.6.10.jar:5.6.10]
at org.elasticsearch.search.SearchService.createSearchContext(SearchService.java:530) ~[elasticsearch-5.6.10.jar:5.6.10]
at org.elasticsearch.search.SearchService.createContext(SearchService.java:479) ~[elasticsearch-5.6.10.jar:5.6.10]
at org.elasticsearch.search.SearchService.createAndPutContext(SearchService.java:461) ~[elasticsearch-5.6.10.jar:5.6.10]
at org.elasticsearch.search.SearchService.executeDfsPhase(SearchService.java:226) ~[elasticsearch-5.6.10.jar:5.6.10]
at org.elasticsearch.action.search.SearchTransportService$5.messageReceived(SearchTransportService.java:332) ~[elasticsearch-5.6.10.jar:5.6.10]
at org.elasticsearch.action.search.SearchTransportService$5.messageReceived(SearchTransportService.java:329) ~[elasticsearch-5.6.10.jar:5.6.10]
at org.elasticsearch.transport.RequestHandlerRegistry.processMessageReceived(RequestHandlerRegistry.java:69) ~[elasticsearch-5.6.10.jar:5.6.10]
at org.elasticsearch.transport.TransportService$7.doRun(TransportService.java:662) ~[elasticsearch-5.6.10.jar:5.6.10]
at org.elasticsearch.common.util.concurrent.ThreadContext$ContextPreservingAbstractRunnable.doRun(ThreadContext.java:675) ~[elasticsearch-5.6.10.jar:5.6.10]
at org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:37) ~[elasticsearch-5.6.10.jar:5.6.10]
... 3 common frames omitted
public interface BookRepository extends ElasticsearchRepository<Book, String> {
    @Query("{\"bool\" : {\"must\" : {\"field\" : {\"name\" : \"?0\"}}}}")
    Page<Book> findByName(String name,Pageable pageable);
}
@Query("{ \"bool\" : { \"must\" : [\t{ \"term\" : {\"userId\" : ?0 } },\t{ \"terms\" : { \"language\" : \"?1\" } } ] } }")
List<PostElastic> findByProviderIdAndLanguagesPostOrderLessThanFromId(Long providerId, List<String> languages, Long fromTimestamp,Pageable pageable);