Content Fields Indexing (OrchardCore.ContentFields.Indexing.SQL)

Purpose

This modules provides database indexing for content fields.

Available Tables

  • Note that types listed are SQL Server data types.

    SQLite doesn't have a length limit on text fields.

BooleanFieldIndex

Name Type Non-Null Primary Key
Id int true true
DocumentId int false false
ContentItemId nvarchar(26) false false
ContentItemVersionId nvarchar(26) false false
ContentType nvarchar(255) false false
ContentPart nvarchar(255) false false
ContentField nvarchar(255) false false
Published bit false false
Latest bit false false
Boolean bit false false

ContentPickerFieldIndex

Name Type Non-Null Primary Key
Id int true true
DocumentId int false false
ContentItemId nvarchar(26) false false
ContentItemVersionId nvarchar(26) false false
ContentType nvarchar(255) false false
ContentPart nvarchar(255) false false
ContentField nvarchar(255) false false
Published bit false false
Latest bit false false
SelectedContentItemId nvarchar(26) false false

DateFieldIndex

Name Type Non-Null Primary Key
Id int true true
DocumentId int false false
ContentItemId nvarchar(26) false false
ContentItemVersionId nvarchar(26) false false
ContentType nvarchar(255) false false
ContentPart nvarchar(255) false false
ContentField nvarchar(255) false false
Published bit false false
Latest bit false false
Date datetime false false

DateTimeFieldIndex

Name Type Non-Null Primary Key
Id int true true
DocumentId int false false
ContentItemId nvarchar(26) false false
ContentItemVersionId nvarchar(26) false false
ContentType nvarchar(255) false false
ContentPart nvarchar(255) false false
ContentField nvarchar(255) false false
Published bit false false
Latest bit false false
DateTime datetime false false

HtmlFieldIndex

Name Type Non-Null Primary Key
Id int true true
DocumentId int false false
ContentItemId nvarchar(26) false false
ContentItemVersionId nvarchar(26) false false
ContentType nvarchar(255) false false
ContentPart nvarchar(255) false false
ContentField nvarchar(255) false false
Published bit false false
Latest bit false false
Html nvarchar(max) false false

LinkFieldIndex

Name Type Non-Null Primary Key
Id int true true
DocumentId int false false
ContentItemId nvarchar(26) false false
ContentItemVersionId nvarchar(26) false false
ContentType nvarchar(255) false false
ContentPart nvarchar(255) false false
ContentField nvarchar(255) false false
Published bit false false
Latest bit false false
Url nvarchar(4000) false false
Text nvarchar(4000) false false

NumericFieldIndex

Name Type Non-Null Primary Key
Id int true true
DocumentId int false false
ContentItemId nvarchar(26) false false
ContentItemVersionId nvarchar(26) false false
ContentType nvarchar(255) false false
ContentPart nvarchar(255) false false
ContentField nvarchar(255) false false
Published bit false false
Latest bit false false
Numeric decimal(19,5) false false

TextFieldIndex

Name Type Non-Null Primary Key
Id Int true true
DocumentId int false false
ContentItemId nvarchar(26) false false
ContentItemVersionId nvarchar(26) false false
ContentType nvarchar(255) false false
ContentPart nvarchar(255) false false
ContentField nvarchar(255) false false
Published bit false false
Latest bit false false
Text nvarchar(4000) false false
BigText nvarchar(max) false false

TimeFieldIndex

Name Type Non-Null Primary Key
Id Int true true
DocumentId int false false
ContentItemId nvarchar(26) false false
ContentItemVersionId nvarchar(26) false false
ContentType nvarchar(255) false false
ContentPart nvarchar(255) false false
ContentField nvarchar(255) false false
Published bit false false
Latest bit false false
Time datetime false false

Usage

Please look at each index tables to see which fields are available to query on. The following examples are for the TextFieldIndex only.

From a class.

using OrchardCore.ContentManagement;
using OrchardCore.ContentFields.Indexing

public class MyClass(){
    private readonly ISession _session;

        public MyClass(ISession session)
        {
            _session = session;
        }

        public async Task<IEnumerable<ContentItem>> GetTextFieldIndexRecords(string contentType, string contentField){
            return await _session.Query<ContentItem, TextFieldIndex>(x => x.ContentType == contentType && x.ContentField == contentField).ListAsync();
        }
}

From a Razor template.

@using OrchardCore.ContentManagement
@using OrchardCore.ContentFields.Indexing
@inject ISession Session

@{
    var contentItems = await Session.Query<ContentItem, TextFieldIndex>(x => x.ContentType == "Acme" && x.ContentField == "Test").ListAsync();
}

From Liquid you will require to create a SQL Query in Orchard Core to retrieve these records first. Name it "AllCountries" for the current example and don't select the option "Return Documents" on the Query.

SELECT * FROM TextFieldIndex
WHERE ContentType = 'Acme' AND ContentField = 'Country'

In our Liquid template we will now retrieve these records.

{% assign allCountries = Queries.AllCountries | query %}
{% for country in allCountries %}
{{ country.Text }}
{% endfor %}

Please note that Datetimes are stored as UTC so a conversion with the current request culture will be required.