ElasticSearch DefaultOperator

  1. 正常来说,搜索的需求一般是我们传入一个keyword(和需要搜索的field name),返回符合条件的列表,那么搜索就分为全文搜索和单属性搜索。顾名思义,全文搜索就是用keyword去匹配所有的属性,单属性搜索就是只匹配指定的属性。

  • 全文搜索:

      1.  keyword = String.Format("*{0}*", keyword);

        1. //默认的Operator是Or,当keyword是类似于"One Two"之类的中间有空格的时候,会被当成两个关键词搜索,然后搜索结果进行or运算

        2. //所以我们需要根据需求来调整Operator

      2. var searchResults = client.Search<T>(s => s

      3.     .Index(index)

      4.     .Query(q => q.QueryString(qs => qs.Query(keyword).DefaultOperator(Operator.And)))

      5. );

      6.  

      7. return searchResults.Documents;

另外由于ES是分词搜索,所以当我们要用"One"来搜索完整的单词"JustOne"的时候,就必须在"One"外面添加**,类似于SQL里面的%keyword%,但是这样的做法会导致在用完整的单词来搜索的时候搜索不到结果,所以我们需要使用下面的方式(如果有更好的方法请不吝赐教):

      1. wholeKeyword = keyword;

      2. keyword = String.Format("*{0}*", keyword);

      3. QueryContainer query = new QueryStringQuery() { Query = keyword, DefaultOperator = Operator.And };

      4. if(!String.IsNullOrEmpty(wholeKeyword)){

      5.    QueryContainer wholeWordQuery = new QueryStringQuery() { Query = wholeKeyword };

      6.    query = query || wholeWordQuery;

      7. }

      8. var searchResults = client.Search<Person>(s => s

      9.     .Index("zhixiao-application")

      10.     .Query(query)

      11. );

转载于:https://my.oschina.net/xiaominmin/blog/1851691

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值