AI OnAI Off
Can you post the actual query that you are executing (the .net part). It seems like query lookup fails as you get an empty 'q' parameter in the urls.
/Henrik
This is how the query is built up (Pretty complicated)
public SearchResult<OtherSearchResultItem> SearchOther(string query, int take = 20, int skip = 0, string orderBy = "", string sortOrder = "asc") { var key = string.Format("SearchOther_q:{0}_t:{1}_s:{2}_o:{3}_so:{4}", query, take, skip, orderBy, sortOrder); var result = CacheManager.Get(key); if (result != null) { return (SearchResult<OtherSearchResultItem>)result; } var totalStopWatch = new Stopwatch(); totalStopWatch.Start(); var returnSearchResult = new SearchResult<OtherSearchResultItem>(); try { var searchQuery = SearchClient.Instance.UnifiedSearchGraspingRightHandTruncationFor(query, Language.Swedish) .Filter(f => !f.MatchType(typeof (EducationInfoToIndex))) .Filter(f => !f.MatchType(typeof (Jobbannons))) .Filter(f => !f.MatchType(typeof (OfficeInfoToIndex))) .Filter(f => !f.MatchType(typeof (ContactPersonToIndex))) .TermsFacetFor(x => x.SearchTypeName, x => { x.Size = 200; }); var searchResult = searchQuery.Skip(skip).Take(take).Track().StaticallyCacheFor(TimeSpan.FromSeconds(60)).GetResult(); returnSearchResult = new SearchResult<OtherSearchResultItem> { TotalCount = searchResult.TotalMatching, ResultItems = searchResult.Hits.Select(h => new OtherSearchResultItem() { Title = h.Document.Title, OtherType = TranslateTypeName(h.Document.TypeName), Description = h.Document.Excerpt, LinkUrl = h.Document.Url, CssClass = h.Document.FileExtension }).ToList(), Facets = new List<FilterFacet> { new FilterFacet() { Name = "Typ", Terms = searchResult.TermsFacetFor(t => t.SearchTypeName) .Terms.Select( t => new FilterTerm() { Name = TranslateTypeName(t.Term), TotalCount = t.Count }).OrderBy(x => x.Name) .ToList() }, } }; if (take == 1000 && searchResult.TotalMatching > 1000) { var nextBatchFrom = 1000; while (nextBatchFrom < searchResult.TotalMatching) { searchResult = searchQuery.Skip(nextBatchFrom).StaticallyCacheFor(TimeSpan.FromSeconds(60)).GetResult(); returnSearchResult.ResultItems.AddRange( searchResult.Hits.Select(h => new OtherSearchResultItem() { Title = h.Document.Title, OtherType = h.Document.TypeName, Description = h.Document.Excerpt, LinkUrl = h.Document.Url.ToLowerInvariant(), CssClass = h.Document.FileExtension })); nextBatchFrom += 1000; } } } catch (Exception exception) { _logger.Error("EPiServer Find ligger nere", exception); } totalStopWatch.Stop(); CacheManager.RuntimeCacheInsert(key, returnSearchResult, null, DateTime.Now.AddMinutes(Helpers.Constants.OtherSearchCacheTimeToLive), Cache.NoSlidingExpiration); return returnSearchResult; }
The function UnifiedSearchGraspingRightHandTruncationFor looks like this:
public static class SearchExtensions { public static IQueriedSearch<ISearchContent> UnifiedSearchGraspingRightHandTruncationFor(this IClient client, string query, Language language) { language = language ?? Language.None; return client.Search<ISearchContent>(language).GraspingRightHandTruncationFor<ISearchContent>(query).WithAndAsDefaultOperator().InAllField(); } public static IQueriedSearch<TSource, QueryStringQuery> GraspingRightHandTruncationFor<TSource>(this ITypeSearch<TSource> search, string queryString) { if (search == null) { throw new ArgumentNullException("search"); } var str = (string.IsNullOrWhiteSpace(queryString) ? "" : queryString); str += !str.Contains("\"") ? "*" : ""; return new Search<TSource, QueryStringQuery>(search, (ISearchContext context) => { var queryStringQuery = new QueryStringQuery(str); queryStringQuery.RawQuery = queryString; var queryStringQuery1 = queryStringQuery; context.RequestBody.Query = queryStringQuery1; }); } }
I hope the grasping would be built in the product soon (we come from SiteSeeker and it exists there, so the customer needed to keep it)
I have now removed my extension with the grasping so now I do not get the error and it works for the unified search.
I have just published a blog post on how to do this for more than just unified search:
http://world.episerver.com/blogs/Henrik-Fransas/Dates/2015/2/how-to-do-custom-query-and-click-tracking-with-episerver-find/
I tried today to enable click tracking again after applying the latest update of Find and I can still not get it to work.
I have added @Html.RequiredClientResources(RenderingTags.Header) in the header and @Html.RequiredClientResources(RenderingTags.Footer) in the body.
The url in the result looks like this:
http://localhost:37005/jobb/Jobbsokartips/Vad-ar-en-kompetensexpert/?_t_id=NNBa49GSHvbWIIh6mQee8Q%3d%3d&_t_q=&_t_tags=language%3asv&_t_ip=%3a%3a1&_t_hit.id=CUSTOMER_Web_Models_Pages_StandardPage/_daf06644-a8a0-441a-859d-af7f0d91242f_sv&_t_hit.pos=1
So it seems like the url is correct.
The problem I get is that when clicking that url I get two 400-request, first this one:
http://localhost:37005/find_v2/_track?id=NNBa49GSHvbWIIh6mQee8Q&q=&tags=language:sv&ip=::1&hit.id=CUSTOMER_Web_Models_Pages_StandardPage/_c4d89f05-1660-4e61-a8d6-dc34b621d4d2_sv&hit.pos=4
That one gives this response
Bad Request
And directly after that I get a 400 on this url
http://es-api01.episerver.com/b4oGn4czRFzH19qEVsAigfi7H1yKMi6e/customersite_localhost/_track?id=NNBa49GSHvbWIIh6mQee8Q&q=&tags=language:sv&ip=::1&hit.id=CUSTOMER_Web_Models_Pages_StandardPage/_c4d89f05-1660-4e61-a8d6-dc34b621d4d2_sv&hit.pos=4
That url gives the response
message=validation failed: 'q' must not be empty
Anyone got this working?