我有一个查询,当给出一个以单字母单词后跟空格字符然后另一个单词(例如:" 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
答案 0 :(得分:1)
我解决了这个问题。
这是由于mysql数据库上的全文本索引的默认配置默认情况下设置为2(ft_min_word_len = 2
)。
我改变了这一点,并重建了索引。然后,查询返回一个字母的单词。
答案 1 :(得分:0)
使用一些引号:
LIKE '%:searchTerm%';
答案 2 :(得分:0)
设置searchTerm="%your_word%"
并在查询中使用它,如下所示:
... s.undiacritizedArabicWordsCache LIKE :searchTerm ...