コード例 #1
0
        public ISearchResponse <WebsiteInfo> FullTextSearch(string searchedContent, SearchPagination pagination)
        {
            var searchResult = client.Search <WebsiteInfo>(s => s
                                                           .Index(Constants.VISITED_WEBSITES_INDEX)
                                                           .Type(mapping)
                                                           .From(pagination.From)
                                                           .Size(pagination.Take)
                                                           .Query(q => q
                                                                  .Bool(b => b
                                                                        .Must(
                                                                            m => m.MultiMatch(w => w
                                                                                              .Fields(f => f.Field("Url").Field("Title").Field("DescriptionMeta").Field("Paragraphs"))
                                                                                              .Query(searchedContent)
                                                                                              .Fuzziness(Fuzziness.EditDistance(2)))
                                                                            , m => m.Term(t => t.Language, "en")
                                                                            )
                                                                        //.Should(m => m.Term(t => t.Language, "en"))
                                                                        )
                                                                  )
                                                           .Highlight(h => h
                                                                      .PreTags("<b>").PostTags("</b>")
                                                                      .Fields(f => f.Field("Url").Field("Title").Field("DescriptionMeta").Field("Paragraphs"))
                                                                      )
                                                           );

            return(searchResult);
        }
コード例 #2
0
        public IActionResult AdvancedResults(SearchContentDTO searchedContent)
        {
            SearchPagination pagination = CreatePagination(searchedContent);

            ESReadWebsitesManager client = new ESReadWebsitesManager();
            var searchResult             = client
                                           .FullTextSearchAdvanced(searchedContent, pagination)
                                           .ToDto(pagination, searchedContent);

            return(Ok(searchResult));
        }
コード例 #3
0
        protected SearchPagination CreatePagination(int take, int page)
        {
            SearchPagination pagination = new SearchPagination()
            {
                Take = take >= 0 ? take : 10,
                Page = page > 0 ? page : 1,
                From = take != 0 && page != 0 ? take * (page - 1) : 0
            };

            return(pagination);
        }
コード例 #4
0
        public IActionResult Results([FromQuery] string searchedContent, [FromQuery] int take, [FromQuery] int page)
        {
            SearchPagination pagination = CreatePagination(take, page);

            var searchedContentDto = new SearchContentDTO()
            {
                Input = searchedContent,
                Take  = pagination.Take,
                Page  = pagination.Page,
            };

            ESReadWebsitesManager client = new ESReadWebsitesManager();
            var searchResult             = client
                                           .FullTextSearch(searchedContent, pagination)
                                           .ToDto(pagination, searchedContentDto);

            return(Ok(searchResult));
        }
コード例 #5
0
        public IActionResult AdvancedResults(SearchContentDTO searchedContent)
        {
            //ViewData["SearchedContent"] = searchedContent;

            SearchPagination pagination = CreatePagination(searchedContent);

            ESReadWebsitesManager client = new ESReadWebsitesManager();
            var searchResult             = client
                                           .FullTextSearchAdvanced(searchedContent, pagination)
                                           .ToDto(pagination, searchedContent);

            if (searchResult.SearchHits.Count == 0)
            {
                return(NotFound());
            }

            return(Ok(searchResult));
        }
コード例 #6
0
        public List <WebsiteInfo> WilcardSearch(string searchedContent, SearchPagination pagination)
        {
            var searchResult = client.Search <WebsiteInfo>(s => s
                                                           .AllIndices()
                                                           .Type(mapping)
                                                           .From(pagination.From)
                                                           .Size(pagination.Take)
                                                           .Query(q => q
                                                                  .Wildcard(w => w
                                                                            .Field("Url")
                                                                            .Value("*" + searchedContent + "*")
                                                                            )
                                                                  )
                                                           );

            var results = searchResult.Documents;

            return(results.ToList());
        }
コード例 #7
0
        protected SearchPagination CreatePagination(int take, int page)
        {
            SearchPagination pagination = new SearchPagination()
            {
                Take = 10,
                Page = 1,
                From = 0
            };

            if (take != 0 && page != 0)
            {
                pagination = new SearchPagination()
                {
                    Take = take,
                    Page = page,
                    From = take * (page - 1)
                };
            }

            return(pagination);
        }
コード例 #8
0
        public IActionResult Results(string searchedContent, int take, int page)
        {
            var searchedContentDto = new SearchContentDTO()
            {
                Input = searchedContent
            };

            //ViewData["SearchedContent"] = searchedContentDto;

            SearchPagination pagination = CreatePagination(take, page);

            ESReadWebsitesManager client = new ESReadWebsitesManager();
            var searchResult             = client
                                           .FullTextSearch(searchedContent, pagination)
                                           .ToDto(pagination, searchedContentDto);

            if (searchResult.SearchHits.Count == 0)
            {
                return(NotFound());
            }

            return(Ok(searchResult));
        }
コード例 #9
0
        protected SearchPagination CreatePagination(SearchContentDTO searchedContent)
        {
            SearchPagination pagination = new SearchPagination()
            {
                Take = 10,
                Page = 1,
                From = 0
            };

            var take = searchedContent.Take ?? 10;
            var page = searchedContent.Page ?? 1;

            if (take != 0 && page != 0)
            {
                pagination = new SearchPagination()
                {
                    Take = take,
                    Page = page,
                    From = take * (page - 1)
                };
            }

            return(pagination);
        }
コード例 #10
0
        public static SearchResultDto ToDto(this ISearchResponse <WebsiteInfo> searchResponse, SearchPagination pagination, SearchContentDTO searchedContent)
        {
            SearchResultDto result = new SearchResultDto
            {
                SearchHits     = searchResponse.Hits.ToDtos(),
                SearchMetadata = new SearchMetadataDto
                {
                    Took            = searchResponse.Took,
                    Total           = searchResponse.Total,
                    SearchedContent = searchedContent
                },
                SearchPagination = pagination
            };

            return(result);
        }
コード例 #11
0
        public ISearchResponse <WebsiteInfo> FullTextSearchMatchSentence(SearchContentDTO searchContent, SearchPagination pagination)
        {
            var searchResult = client.Search <WebsiteInfo>(s => s
                                                           .Index(Constants.VISITED_WEBSITES_INDEX)
                                                           .Type(mapping)
                                                           .From(pagination.From)
                                                           .Size(pagination.Take)
                                                           .Query(q => q
                                                                  .Bool(b => b
                                                                        .Must(
                                                                            m => m.MatchPhrase(w => w
                                                                                               .Field(p => p.FullPageContent)
                                                                                               .Query(searchContent.Input)
                                                                                               ),
                                                                            m => m.Term(t => t.Language, searchContent.Language)
                                                                            )
                                                                        )
                                                                  )
                                                           .Highlight(h => h.PreTags("<b>").PostTags("</b>")
                                                                      .Fields(f => f.Field("Url").Field("Title").Field("DescriptionMeta")
                                                                              .Field("Paragraphs").Field("FullPageContent"))
                                                                      )
                                                           );

            return(searchResult);
        }
コード例 #12
0
        public ISearchResponse <WebsiteInfo> FullTextSearchAdvanced(SearchContentDTO searchContent, SearchPagination pagination)
        {
            if (searchContent.MatchUncrawledWebsites)
            {
                return(FullTextSearchPendingWebsites(searchContent, pagination));
            }

            if (searchContent.MatchExactSentence)
            {
                return(FullTextSearchMatchSentence(searchContent, pagination));
            }

            var searchResult = client.Search <WebsiteInfo>(s => s
                                                           .Index(Constants.VISITED_WEBSITES_INDEX)
                                                           .Type(mapping)
                                                           .From(pagination.From)
                                                           .Size(pagination.Take)
                                                           .Query(q => q
                                                                  .Bool(b => b
                                                                        .Must(
                                                                            m =>
                                                                            m.MultiMatch(w => w
                                                                                         .Fields(f => f.Field("Url").Field("Title").Field("DescriptionMeta")
                                                                                                 .Field("Paragraphs").Field("FullPageContent"))
                                                                                         .Query(searchContent.Input)
                                                                                         .Fuzziness(Fuzziness.EditDistance(searchContent.Fuzziness))
                                                                                         ),
                                                                            m => m.Term(t => t.Language, searchContent.Language),
                                                                            m => m.DateRange(t => t
                                                                                             .Field(f => f.CreateDate)
                                                                                             .GreaterThanOrEquals(searchContent.StartDate)
                                                                                             .LessThanOrEquals(searchContent.EndDate))
                                                                            )
                                                                        )
                                                                  )
                                                           .Highlight(h => h.PreTags("<b>").PostTags("</b>")
                                                                      .Fields(f => f.Field("Url").Field("Title").Field("DescriptionMeta")
                                                                              .Field("Paragraphs").Field("FullPageContent"))
                                                                      )
                                                           );

            return(searchResult);
        }
コード例 #13
0
        public ISearchResponse <WebsiteInfo> FullTextSearchPendingWebsites(SearchContentDTO searchContent, SearchPagination pagination)
        {
            var searchResult = client.Search <WebsiteInfo>(s => s
                                                           .Index(Constants.PENDING_WEBSITES_INDEX)
                                                           .Type(mapping)
                                                           .From(pagination.From)
                                                           .Size(pagination.Take)
                                                           .Query(q => q
                                                                  .Bool(b => b
                                                                        .Must(m => m
                                                                              .MultiMatch(w => w
                                                                                          .Fields(f => f.Field("Url"))
                                                                                          .Query(searchContent.Input)
                                                                                          .Fuzziness(Fuzziness.EditDistance(searchContent.Fuzziness)))
                                                                              )
                                                                        )
                                                                  )
                                                           .Highlight(h => h.PreTags("<b>").PostTags("</b>")
                                                                      .Fields(f => f.Field("Url"))
                                                                      )
                                                           );

            return(searchResult);
        }