如何使用Spring-Boot和JPA匹配elasticsearch请求中的任何字符?

aemubtdh  于 2023-08-03  发布在  ElasticSearch
关注(0)|答案(2)|浏览(110)

我想将任意字符与两个字符“”和“匹配。“在使用JPA和elasticsearch数据库的查询的参数中。
示例如下:
在我的数据库中,我有一个“code”字符串:“AA33BB”、“AA38BB”、“CG77FF”、“DV11PL”...
我希望收到参数为“AA
”的前100个结果作为答案=>“AA 33 BB”,“AA 38 BB”。
而且还接收具有参数“AA 3?BB”还是“AA”?BB”(在任何地方)作为答案获得=>“AA 33 BB”,“AA 38 BB”。
我使用Java Spring-Boot 3和elasticsearch依赖:

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>

字符串
/我的仓库:

@Repository
public interface CodeRepository extends ElasticsearchRepository<Code, Long> {

     Iterable<Code> findFirst100CodeContaining(String code);

}


//我的服务:

@Service
public classServiceCode {

@Autowired
     private CodeRepository codeRepository;

public Iterable<CodeDTO> searchCodes(CodeDTO CodeDTO) {
         String code = codeDTO.getCode();
         code = code.replace("?", ".");
         code = code.replace("*", "");
         Iterable<Code> codeList = codeRepository.findFirst100ByCodeContaining(code);
         return mapToListOfDTO(codeList);
     }
}


SQL版本查询:@Query(“SELECT c FROM codes c WHERE c.code LIKE:code”)
对“*”有效,对“无效?“.
你有一个想法的字符来取代或如何做,否则?

vaj7vani

vaj7vani1#

我已经通过以下代码更改了我的存储库:

@Query("{\"bool\": {\"must\": [{\"match\": {\"wildcard\": {\"code\": {\"value\": \"{code}\"}}}]}}")
Iterable<Code> findByCodeAndQuery(String code);

字符串
和我的服务由这个代码:

@Service
public classServiceCode {

@Autowired
     private CodeRepository codeRepository;

public Iterable<CodeDTO> searchCodes(CodeDTO CodeDTO) {
         String code = codeDTO.getCode();
         code = code.replace("?", "*");
         Iterable<Code> codeList = codeRepository.findByCodeAndQuery(code);
         return mapToListOfDTO(codeList);
     }
}


我的模型是如何配置的:

@Id
 @Field(type = FieldType.Keyword)
 private String id;

 @Field(type = FieldType.Keyword, name = "code")
 private String code;


但这也不管用...

fcwjkofz

fcwjkofz2#

我找到了答案,用这种方式传递参数就足够了:

@Query("{\"bool\": {\"must\": [{\"match\": {\"wildcard\": {\"code\": {\"value\": \"?1\"}}}]}}")

字符串
成功了!

相关问题