首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL查询,不管JSF标点符号如何,都会带来所有结果

SQL查询,不管JSF标点符号如何,都会带来所有结果
EN

Stack Overflow用户
提问于 2014-03-06 10:00:58
回答 1查看 193关注 0票数 0

所以我有一个数据库,里面有文章,用户应该能够搜索他们输入的关键字,搜索应该能找到任何包含这个词的文章。

因此,例如,如果有人要搜索阿尔茨海默氏症这个词,我会希望它以任何方式返回带有拼写的文章,而不管它的撇号是什么;

阿尔茨海默氏症

阿尔茨海默病

结果应全部返回。在这一分钟,它是搜索准确的方式,这个词是拼写,不会带来结果,如果它有标点符号。

因此,我现在要查询的是:

代码语言:javascript
复制
 private static final String QUERY_FIND_BY_SEARCH_TEXT = "SELECT o FROM EmailArticle o where UPPER(o.headline) LIKE :headline OR UPPER(o.implication) LIKE :implication OR UPPER(o.summary) LIKE :summary";

用户的输入称为“searchText”,它来自输入框。

代码语言:javascript
复制
 public static List<EmailArticle> findAllEmailArticlesByHeadlineOrSummaryOrImplication(String searchText) {
    Query query = entityManager().createQuery(QUERY_FIND_BY_SEARCH_TEXT, EmailArticle.class);

      String searchTextUpperCase = "%" + searchText.toUpperCase() + "%";
    query.setParameter("headline", searchTextUpperCase);
    query.setParameter("implication", searchTextUpperCase);
    query.setParameter("summary", searchTextUpperCase);
    List<EmailArticle> emailArticles = query.getResultList();
    return emailArticles;
}

所以我想把所有的结果带回阿尔茨海默氏症,不管他们是否是一个撇号。我想我已经提供了足够的信息,但是如果你需要更多的话,就直说吧。不太清楚该如何使用它,是否可以替换/删除用户搜索中的所有标点符号或撇号?

EN

回答 1

Stack Overflow用户

发布于 2022-05-01 09:56:04

在我看来,您应该更改查询,应该添加alter表,并向列中添加FULLTEXT索引(标题、含义、摘要)。

您还应该使用MATCH-AGAINST,而不是使用LIKE查询,最重要的是,阅读SOUNDEX()语法,非常漂亮的语法。

我只能给您提供一个本机查询示例:

SELECT o.* FROM email_article o WHERE MATCH(o.headline, o.implication, o.summary) AGAINST('your-text') OR SOUNDEX(o.headline) LIKE SOUNDEX('your-text') OR SOUNDEX(o.implication) LIKE SOUNDEX('your-text') OR SOUNDEX(o.summary) LIKE SOUNDEX('your-text') ;

虽然它不会给你像谷歌搜索那样的结果,但它在某种程度上是有效的。让我知道你的想法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22220973

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档