JPA选择查询不返回带有单个字母的结果

时间:2018-06-11 08:46:35

标签: java spring jpa

我有一个查询,当给出一个以单字母单词后跟空格字符然后另一个单词(例如:" T Distribution")开头的单词时,不会返回结果。给予"发布"单独返回结果,包括" T Distribution"的结果。所有搜索词都以单字母单词开头,后跟空格字符,然后是另一个单词,这是相同的行为。

当搜索字词属于此模式时,会出现问题: " [单字母] [空间] [字母/字]&#34 ;.例如:" o ring"。

在这种情况下,LIKE运算符无法正常工作会出现什么问题?

这是我的问题:

@Cacheable(value = "filteredConcept")
@Query("SELECT NEW sina.backend.data.model.ConceptSummaryVer04(s.id, s.arabicGloss, s.englishGloss, s.example, s.dataSourceId,
s.synsetFrequnecy, s.arabicWordsCache, s.englishWordsCache, s.superId, s.categoryId, s.dataSourceCacheAr, s.dataSourceCacheEn,
s.superTypeCasheAr, s.superTypeCasheEn, s.area, s.era, s.rank, s.undiacritizedArabicWordsCache, s.normalizedEnglishWordsCache, 
s.isTranslation, s.isGloss, s.arabicSynonymsCount, s.englishSynonymsCount) FROM Concept s 
where s.undiacritizedArabicWordsCache LIKE %:searchTerm% AND data_source_id != 200 AND data_source_id != 31")
List<ConceptSummaryVer04> findByArabicWordsCacheAndNotConcept(@Param("searchTerm") String searchTerm, Sort sort);

查询数据库本身的结果: link to screenshot

无论字母大小写,都会返回

数据库上的结果: link to screenshot

3 个答案:

答案 0 :(得分:1)

我解决了这个问题。 这是由于mysql数据库上的全文本索引的默认配置默认情况下设置为2(ft_min_word_len = 2)。

我改变了这一点,并重建了索引。然后,查询返回一个字母的单词。

12.9.6 Fine-Tuning MySQL Full-Text Search

答案 1 :(得分:0)

使用一些引号:

 LIKE '%:searchTerm%'; 

答案 2 :(得分:0)

设置searchTerm="%your_word%"并在查询中使用它,如下所示:

... s.undiacritizedArabicWordsCache LIKE :searchTerm ...