Ejemplo n.º 1
0
 public IWhere Contains(IFullTextSearchCondition searchcondition, string language, params string[] columnlist)
 {
     if (!string.IsNullOrEmpty(language))
     {
         this.sql.AppendFormat(" CONTAINS({0},{1},LANGUAGE N'{2}')", Utility.GetListAsString<string>(columnlist.ToList(), ","), searchcondition.ToString(), language);
     }
     else
     {
         this.sql.AppendFormat(" CONTAINS({0},{1})", Utility.GetListAsString<string>(columnlist.ToList(), ","), searchcondition.ToString());
     }
     return this;
 }
Ejemplo n.º 2
0
 public IWhere Contains(IFullTextSearchCondition searchcondition, string language, params string[] columnlist)
 {
     if (!string.IsNullOrEmpty(language))
     {
         this.sql.AppendFormat(" CONTAINS({0},{1},LANGUAGE N'{2}')", Utility.GetListAsString <string>(columnlist.ToList(), ","), searchcondition.ToString(), language);
     }
     else
     {
         this.sql.AppendFormat(" CONTAINS({0},{1})", Utility.GetListAsString <string>(columnlist.ToList(), ","), searchcondition.ToString());
     }
     return(this);
 }
Ejemplo n.º 3
0
 public IFrom ContainsTable(string tableName, IFullTextSearchCondition searchcondition, string language, int top_n_byrank, params string[] columnList)
 {
     this.sql.AppendFormat(" CONTAINSTABLE({0},{1},'{2}', LANGUAGE N'{3}',{4})", tableName, Utility.GetListAsString <string>(columnList.ToList(), ","), searchcondition.ToString(), language, top_n_byrank);
     return(this);
 }
Ejemplo n.º 4
0
 public IFrom ContainsTable(string tableName, IFullTextSearchCondition searchcondition, params string[] columnList)
 {
     this.sql.AppendFormat(" CONTAINSTABLE({0},{1},{2})", tableName, Utility.GetListAsString <string>(columnList.ToList(), ","), searchcondition.ToString());
     return(this);
 }
Ejemplo n.º 5
0
 public string Contains(IFullTextSearchCondition searchcondition, string language, params string[] columnlist)
 {
     return(string.Format(" CONTAINS({0},{1},LANGUAGE N'{2}')", Utility.GetListAsString <string>(columnlist.ToList(), ","), searchcondition.ToString(), language));
 }
Ejemplo n.º 6
0
 public IWhere FreeText(IFullTextSearchCondition searchterm, params string[] columnlist)
 {
     this.sql.AppendFormat(" FREETEXT({0},'{1}')", Utility.GetListAsString <string>(columnlist.ToList(), ","), searchterm.ToString());
     return(this);
 }
Ejemplo n.º 7
0
 public IFrom ContainsTable(string tableName, IFullTextSearchCondition searchcondition, string language, int top_n_byrank, params string[] columnList)
 {
     this.sql.AppendFormat(" CONTAINSTABLE({0},{1},'{2}', LANGUAGE N'{3}',{4})", tableName, Utility.GetListAsString<string>(columnList.ToList(), ","), searchcondition.ToString(), language, top_n_byrank);
     return this;
 }
Ejemplo n.º 8
0
 public IFrom ContainsTable(string tableName, IFullTextSearchCondition searchcondition, params string[] columnList)
 {
     this.sql.AppendFormat(" CONTAINSTABLE({0},{1},{2})", tableName, Utility.GetListAsString<string>(columnList.ToList(), ","), searchcondition.ToString());
     return this;
 }
Ejemplo n.º 9
0
 public string Contains(IFullTextSearchCondition searchcondition, string language, params string[] columnlist)
 {
     return string.Format(" CONTAINS({0},{1},LANGUAGE N'{2}')", Utility.GetListAsString<string>(columnlist.ToList(), ","), searchcondition.ToString(), language);
 }
Ejemplo n.º 10
0
 public IWhere FreeText(IFullTextSearchCondition searchterm, params string[] columnlist)
 {
     this.sql.AppendFormat(" FREETEXT({0},'{1}')", Utility.GetListAsString<string>(columnlist.ToList(), ","), searchterm.ToString());
     return this;
 }
        /// <summary>
        /// 全文检索
        /// </summary>
        /// <typeparam name="T">查询模型类型</typeparam>
        /// <param name="condition">查询条件</param>
        /// <returns></returns>
        public IEnumerable <T> FullTextSearch <T>(IFullTextSearchCondition <T> condition) where T : SearchEntityBase
        {
            var indexMappingName = IndexNameHelper.GetIndexMappingName(SetupConfig.SetupConfig.ServiceSign, condition.Index);
            var status           = this.CacheClient.GetCache <IndexOperateStatus>(indexMappingName);

            this.IndexOperate.CkeckIndexStatus <T>(status, indexMappingName);

            if (condition.SearchFields == null || condition.SearchFields.Length == 0)
            {
                throw new ElasticsearchException("全文检索失败:查询字段不能为空");
            }

            var searchRequest = new SearchRequest <T>(indexMappingName);

            searchRequest.Size = condition.SizeNumber;
            searchRequest.From = condition.SkipNumber;

            var boolQuery = new BoolQuery();
            List <QueryContainer> queryContainers = new List <QueryContainer>();

            if (condition.SearchFields.Length > 1)
            {
                queryContainers.Add(new MultiMatchQuery {
                    Fields = condition.SearchFields, Query = condition.SearchValue
                });
            }
            else
            {
                queryContainers.Add(new MatchQuery {
                    Field = condition.SearchFields[0], Query = condition.SearchValue
                });
            }
            boolQuery.Must = queryContainers;
            if (condition.FilterPredicate != null)
            {
                boolQuery.Filter = new List <QueryContainer> {
                    condition.FilterPredicate.GetQuery()
                };
            }

            searchRequest.Query = boolQuery;

            if (condition.Sort != null && condition.Sort.Count() > 0)
            {
                searchRequest.Sort = condition.Sort.Select(x => (ISort) new SortField
                {
                    Field = x.Field,
                    Order = x.isAsc ? SortOrder.Ascending : SortOrder.Descending
                }).ToList();
            }

            var highlight = new Highlight();
            var dic       = new Dictionary <Field, IHighlightField>();

            foreach (var field in condition.SearchFields)
            {
                dic.Add(field, new HighlightField());
            }
            highlight.Fields = dic;

            searchRequest.Highlight = highlight;

            var response = Client.Search <T>(searchRequest);

            if (!response.IsValid)
            {
                throw new ElasticsearchException("全文检索失败:" + response.OriginalException.Message);
            }
            if (condition.IsHighLight)
            {
                return(response.Hits.Select(x => this.SetHightValue(x.Source, x.Highlights)));
            }
            return(response.Hits.Select(x => x.Source));
        }