张永利 發表於 2019-9-27 14:14:00

mongodb全文搜索

<p>mongodb 的 enterprise 集合存储企业信息:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">{
    </span>"_id" : ObjectId("5d62b2a4380d051cfc00565b"<span style="color: rgba(0, 0, 0, 1)">),
    </span>"companyName" : "浙江《交通旅游导报》报业有限公司"<span style="color: rgba(0, 0, 0, 1)">,
    </span>"companyCode" : "913300007719260474"<span style="color: rgba(0, 0, 0, 1)">,
    </span>"provice" : ""<span style="color: rgba(0, 0, 0, 1)">,
    </span>"city" : ""<span style="color: rgba(0, 0, 0, 1)">,
    </span>"adress" : ""<span style="color: rgba(0, 0, 0, 1)">,
    </span>"zipcode" : ""<span style="color: rgba(0, 0, 0, 1)">,
    </span>"companyEmail" : ""<span style="color: rgba(0, 0, 0, 1)">,
    </span>"contactPhone" : ","<span style="color: rgba(0, 0, 0, 1)">,
    </span>"source" : 1<span style="color: rgba(0, 0, 0, 1)">,
    </span>"date" : ISODate("2019-08-25T16:09:05.177Z"<span style="color: rgba(0, 0, 0, 1)">),
    </span>"_class" : "com.third.demo.entity.NewEnterprise"<span style="color: rgba(0, 0, 0, 1)">
}</span></pre>
</div>
<p>集合的javaBean:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> com.baomidou.mybatisplus.annotation.TableName;
</span><span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> lombok.Data;
</span><span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> org.springframework.data.mongodb.core.index.Indexed;
</span><span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> org.springframework.data.mongodb.core.index.TextIndexed;
</span><span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> org.springframework.data.mongodb.core.mapping.Document;
</span><span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> org.springframework.data.mongodb.core.mapping.Field;

</span><span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> java.io.Serializable;


@Data
@Document(</span>"enterprise"<span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">class</span> GxyEnterpriseDto<span style="color: rgba(0, 0, 255, 1)">implements</span><span style="color: rgba(0, 0, 0, 1)"> Serializable {

    @Field(</span>"_id"<span style="color: rgba(0, 0, 0, 1)">)
    </span><span style="color: rgba(0, 0, 255, 1)">private</span><span style="color: rgba(0, 0, 0, 1)"> String practiceCompanyId;

    </span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
   * 企业名称
   </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
    @TextIndexed
    </span><span style="color: rgba(0, 0, 255, 1)">private</span><span style="color: rgba(0, 0, 0, 1)"> String companyName;
    </span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
   * 企业代码
   </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
    @TextIndexed
    </span><span style="color: rgba(0, 0, 255, 1)">private</span><span style="color: rgba(0, 0, 0, 1)"> String companyCode;
    </span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
   * 省份
   </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
    <span style="color: rgba(0, 0, 255, 1)">private</span><span style="color: rgba(0, 0, 0, 1)"> String province;
    </span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
   * 城市
   </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
    <span style="color: rgba(0, 0, 255, 1)">private</span><span style="color: rgba(0, 0, 0, 1)"> String city;
    </span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
   * 区域
   </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
    <span style="color: rgba(0, 0, 255, 1)">private</span><span style="color: rgba(0, 0, 0, 1)"> String area;
    </span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
   * 企业地址
   </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
    <span style="color: rgba(0, 0, 255, 1)">private</span><span style="color: rgba(0, 0, 0, 1)"> String address;
    </span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
   * 邮编
   </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
    <span style="color: rgba(0, 0, 255, 1)">private</span><span style="color: rgba(0, 0, 0, 1)"> String zipcode;
    </span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
   * 人数
   </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
   <span style="color: rgba(0, 0, 255, 1)">private</span><span style="color: rgba(0, 0, 0, 1)"> String peopleNum;

    </span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
   * 经验范围
   </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
   <span style="color: rgba(0, 0, 255, 1)">private</span><span style="color: rgba(0, 0, 0, 1)"> String companScope;
    </span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
   * 企业邮箱
   </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
   <span style="color: rgba(0, 0, 255, 1)">private</span><span style="color: rgba(0, 0, 0, 1)"> String companyEmail;
    </span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
   * 是否可用
   </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
   <span style="color: rgba(0, 0, 255, 1)">private</span><span style="color: rgba(0, 0, 0, 1)"> Integer state;

    </span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
   * 企业是否认证(1是 0否)
   </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
    <span style="color: rgba(0, 0, 255, 1)">private</span><span style="color: rgba(0, 0, 0, 1)"> Integer isCompanyAuthen;
    </span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
   * 电话
   </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
    <span style="color: rgba(0, 0, 255, 1)">private</span><span style="color: rgba(0, 0, 0, 1)"> String contactPhone;
    </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">1 芥末返回 2校企3 第三方没验证过 4学生提交</span>
    <span style="color: rgba(0, 0, 255, 1)">private</span><span style="color: rgba(0, 0, 0, 1)"> Integer source;
}</span></pre>
</div>
<p>使用&nbsp;&nbsp;@TextIndexed 注解给企业名称加上文本索引 ,拥有text index的collection才支持全文检索 。</p>
<p>查询的java 代码:</p>
<div class="cnblogs_code">
<pre>    <span style="color: rgba(0, 0, 255, 1)">public</span> List&lt;GxyEnterpriseDto&gt;<span style="color: rgba(0, 0, 0, 1)"> searchCompany(String companyName){
      Query query </span>= <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> Query();
       </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> Term term = new Term();</span>
      Pageable pageable = PageRequest.of(0,50<span style="color: rgba(0, 0, 0, 1)">);
      TextCriteria criteria </span>=<span style="color: rgba(0, 0, 0, 1)"> TextCriteria.forDefaultLanguage()
                .matching(companyName);

      Criteria criteria1 </span>=Criteria.where("source").in(1,2<span style="color: rgba(0, 0, 0, 1)">);

      query.addCriteria(criteria1);
      query.addCriteria(criteria);
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">      Aggregation eatAggregation = Aggregation.newAggregation(
</span><span style="color: rgba(0, 128, 0, 1)">//</span>                <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">查询条件
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">                Aggregation.match(criteria),
</span><span style="color: rgba(0, 128, 0, 1)">//</span>                <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">查询项
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">                Aggregation.project("practiceCompanyId","companyName","companyCode","province","city","area","address","zipcode","peopleNum","companyType","companyTypeValue","trade","tradeValue","companScope","companyEmail","contactName","contactPhone"),
</span><span style="color: rgba(0, 128, 0, 1)">//</span>                <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">分组条件和聚合项
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">                Aggregation.group("companyCode","companyName"),
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">                Aggregation.limit(300)
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">      );</span>
      List&lt;GxyEnterpriseDto&gt; datas = mongoTemplate.find(query.with(pageable),GxyEnterpriseDto.<span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)">);
      </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> datas;
    }</span></pre>
</div>
<p>db.getCollection('enterprise').find({ "source" : { "$in" : }, "$text" : { "$search" : "浙江" } })</p><br><br>
来源:https://www.cnblogs.com/z360519549/p/11597701.html
頁: [1]
查看完整版本: mongodb全文搜索