I have a custom ISearchableContentType
I'm wondering once I create new content of that type, how long will it take before it shows up in the search index?
I have a custom ISearchableContentType
I'm wondering once I create new content of that type, how long will it take before it shows up in the search index?
I have verified my content is in the Solr index, but it is not returned as a search result in the site. Do I need to specify content types?
public IList<SearchIndexDocument> GetContentToIndex() { List<SearchIndexDocument> documents = new List<SearchIndexDocument>(); var pages = Components.CMSPages.ListPages(); foreach (var page in pages) { if (page.IsPublished) { SearchIndexDocument doc = new SearchIndexDocument { Content = page.ContentBlob, Title = page.MetaTitle, ContentId = page.ContentId, ContentTypeId = Components.CMSPages.CMS_PAGE_CONTENT_TYPE_ID, Id = page.Id.ToString(), TypeName = "HFCMSPAGE", Url = page.Url, }; documents.Add(doc); } } return documents; }
Did you provides roles for ISearchableContentType.GetViewSecurityRoles()? Minimally Everyone role. Not doing this will definitely make it not come back. I would say also add a date and category to participate in any faceting. Can you post a document (xml) from Solr here (or PM). I can try to load it up.
Yes. I can see my custom content type showing up in the facets, but no results yet.
<doc> <str name="content">Luke CMS Page is a great page where you can do Klokov press and other types of squats and olympic lifts.</str> <str name="rawcontent">Luke CMS Page is a great page where you can do Klokov press and other types of squats and olympic lifts.</str> <str name="title">Luke CMS Page</str> <str name="contenttypeid">2da07dc7-f5f3-4f6f-8766-218a0153714e</str> <str name="id">2</str> <str name="type">WebContent</str> <str name="url">/luke-cms-page</str> <arr name="category"> <str>WebContent</str> </arr> <long name="_version_">1660270192257662976</long> <bool name="isapplication">false</bool> <bool name="iscontainer">false</bool> <double name="contentscore">0.0</double> <date name="timestamp">2020-03-04T21:24:00.651Z</date> <float name="score">13.498373</float></doc>
public Guid[] ApplicationTypes { get { return new Guid[] { Apis.Get<IGroups>().ApplicationTypeId }; } } public Guid ContentTypeId { get { return Components.CMSPages.CMS_PAGE_CONTENT_TYPE_ID; } } public string ContentTypeName { get { return "CMS Page"; } } public string Description { get { return "Content type for custom CMS pages"; } } public string Name { get { return "Hearing First - CMS Page Content Type"; } } public bool IsCacheable => true; public bool VaryCacheByUser => false; public void AttachChangeEvents(IContentStateChanges stateChanges) { } public IContent Get(Guid contentId) { return Components.CMSPages.Get(contentId); } public IList<SearchIndexDocument> GetContentToIndex() { List<SearchIndexDocument> documents = new List<SearchIndexDocument>(); var pages = Components.CMSPages.ListPages(); foreach (var page in pages) { if (page.IsPublished) { SearchIndexDocument doc = new SearchIndexDocument { Content = page.ContentBlob, Title = page.MetaTitle, ContentId = page.ContentId, ContentTypeId = Components.CMSPages.CMS_PAGE_CONTENT_TYPE_ID, Id = page.Id.ToString(), TypeName = "WebContent", Url = page.Url, }; documents.Add(doc); } } return documents; } public string GetViewHtml(IContent content, Target target) { var page = Components.CMSPages.Get(content.ContentId); return page.MetaDescription; } public int[] GetViewSecurityRoles(Guid contentId) { List<int> roleIds = new List<int>(); // Add the Everyone Role roleIds.Add(1); return roleIds.ToArray(); } public void Initialize() { }
Havent tried yet but can I assume the last missing element is roles?
I did add the Everyone Role...and still didn't show
However, in the document that is in Solr, I'm not seeing them...When I search for a piece of Telligent content I see this
<arr name="roles"> <str>3</str> <str>4</str> <str>14</str> <str>15</str> <str>16</str> <str>81</str> <str>95</str> </arr>
Added this to my Class as well
public int[] GetViewSecurityRoles(Guid contentId) { List<int> roleIds = new List<int>(); // Add the Everyone Role roleIds.Add(1); return roleIds.ToArray(); }
Set the Id = ContentId. When adding the roles its looking up by Id vs ContentId.
Set the Id = ContentId. When adding the roles its looking up by Id vs ContentId.
I'm not following what to change
Use this constructor SearchIndexDocument(Guid contentId, Guid contentTypeId) (because its sets the Id, UniqueId, ContentId and contentTypeId) and remove the line that sets the Id.There looks to be some legacy cross-crossing of field setting from when Ids were integers and ContentId were not around and using this constructor avoids that.
I did that...content still getting indexed, but no roles still
public IList<SearchIndexDocument> GetContentToIndex() { List<SearchIndexDocument> documents = new List<SearchIndexDocument>(); var pages = Components.CMSPages.ListPages(); foreach (var page in pages) { if (page.IsPublished) { SearchIndexDocument doc = new SearchIndexDocument(page.ContentId, Components.CMSPages.CMS_PAGE_CONTENT_TYPE_ID) { Content = page.ContentBlob, Title = page.MetaTitle, TypeName = "WebContent", Url = page.Url }; documents.Add(doc); } } return documents; } public string GetViewHtml(IContent content, Target target) { var page = Components.CMSPages.Get(content.ContentId); return page.MetaDescription; } public int[] GetViewSecurityRoles(Guid contentId) { List<int> roleIds = new List<int>(); // Add the Everyone Role roleIds.Add(1); return roleIds.ToArray(); }
While I review can you try manually adding a role via the document.IndexFields. The values will be "roles", "1".
In GetContentToIndex(), build your new document using ISearchIndexing.NewDocument(..). That in turn will call ISearchableContentType.GetViewSecurityRoles()
Looks like I have the roles now appearing in the solr document
<doc> <str name="id">28c4b8f2-6f3a-4b95-aff4-df875968afd3</str> <str name="contenttypeid">2da07dc7-f5f3-4f6f-8766-218a0153714e</str> <str name="type">WebContent</str> <str name="url">/ronnie-coleman</str> <str name="title">Ronnie Coleman Is a Boss</str> <str name="content">Ronnie Coleman Is a Boss</str> <str name="rawcontent">Ronnie Coleman Is a Boss</str> <arr name="roles"> <str>1</str> </arr> <double name="contentscore">0.0</double> <arr name="category"> <str>WebContent</str> </arr> <long name="_version_">1660326031514402817</long> <bool name="isapplication">false</bool> <bool name="iscontainer">false</bool> <date name="timestamp">2020-03-05T12:11:33.116Z</date> <float name="score">37.67538</float></doc>, but still not showing up in site search. Does the number correlate to the Int Id in the cs_Security_Roles table?
Yes, its correlates to that Id. Site searches also issues collapsed/grouped results which could be filtering out these results. To avoid this possibility will you add a field called "collapse" to the IndexFields list and set the value to typename and unique contentid. So, an example field value would be "WebContent:28c4b8f2-6f3a-4b95-aff4-df875968afd3".
Here is the Solr Doc I have being indexed now. Still not showing up from the top search bar though.
<result name="response" numFound="1" start="0" maxScore="113.34428"> <doc> <str name="collapse">WebContent:de5dfe62-f627-4fb4-a59e-ba937b7c8171</str> <arr name="roles"> <str>1</str> </arr> <str name="title">Jay Cutler</str> <str name="content">Jay Cutler</str> <str name="rawcontent">Jay Cutler</str> <str name="id">de5dfe62-f627-4fb4-a59e-ba937b7c8171</str> <str name="type">WebContent</str> <str name="url">/jay-cutler</str> <str name="contenttypeid">2da07dc7-f5f3-4f6f-8766-218a0153714e</str> <double name="contentscore">0.0</double> <arr name="category"> <str>WebContent</str> </arr> <long name="_version_">1660340289554874369</long> <bool name="isapplication">false</bool> <bool name="iscontainer">false</bool> <date name="timestamp">2020-03-05T15:58:10.639Z</date> <float name="score">113.34428</float></doc> </result> </response>