Spring Data + Mongo case-insensitieve Text Search

时间:2015-10-26 06:24:50

标签: java mongodb spring-data spring-data-mongodb

我尝试使用spring数据库在mongodb中的几个字段上实现不区分大小写的文本搜索。我找到了两个解决方案,每个解决方案都有一些缺点:

  1. 使用正则表达式:

    @Query("{'status': 'ACTIVE', $or: [{'title': {$regex : ?0, $options: 'i'}}, {'location.text': {$regex : ?0, $options: 'i'}}]}")
    Page<Article> findAllActiveBySearchString(String search, Pageable pageable);
    
  2. 这样的查询在字符串&#34; /&#34;,&#34; *&#34;上失败,并返回&#34;。&#34;上的所有条目,所以我必须逃避theese字符或以某种方式过滤它,但我甚至不知道可能存在多少这样的查询。所以我的问题是如何100%确保查询执行搜索,将每个字符视为普通字符

    1. 使用$ text索引,需要先创建该索引(不是问题)。解决方案也有更好的性能,不是吗?

      @Query("{'status': 'ACTIVE', $text: {$search: ?0}}")
      Page<Article> findAllActiveBySearchString(String search, Pageable pageable);
      
    2. 我不知道它不是不区分大小写的,所以我必须用小写数据创建特殊字段并将其编入索引 - 是实现目标的唯一途径,还是我错过了什么?

1 个答案:

答案 0 :(得分:0)

MongoDb未针对全文搜索进行优化,因此您必须应对此限制或使用其他搜索引擎,例如elasticsearch或solr。

在内部,你正在做同样的事情。例如,使用不同的分析器,如小写,停用词过滤,词干或n-gram分析进行模糊搜索。

如果你想坚持使用MongoDb,你必须自己编写和索引这些功能。

相关问题