/// <summary>
        /// Adds a filter based on a binding path. The given token will resolve to a property at the specified <paramref name="path"/>.
        /// </summary>
        /// <param name="token">The identifier of the filter. Typically what precedes the operator in a filter.</param>
        /// <param name="path">The property this token should resolve to.</param>
        /// <param name="supportedOperatorTypes">List of supported operator tokens. Null for all operators.</param>
        public void AddSearchFilterProperty(string token, PropertyPath path, string[] supportedOperatorTypes = null)
        {
            SearchFilterTokens.Add(token);
            SearchFilterProperties.Add(new SearchFilterProperty(token, path, supportedOperatorTypes));

            foreach (var backend in m_SearchBackends.Values)
            {
                backend.AddSearchFilterProperty(token, path, supportedOperatorTypes);
            }
        }
        /// <summary>
        /// Adds a filter based on a binding path. The given token will resolve to a property at the specified <paramref name="path"/>.
        /// </summary>
        /// <param name="token">The identifier of the filter. Typically what precedes the operator in a filter.</param>
        /// <param name="path">The property this token should resolve to.</param>
        /// <param name="options">The set of filter options.</param>
        public void AddSearchFilterProperty(string token, PropertyPath path, SearchFilterOptions options)
        {
            SearchFilterTokens.Add(token);
            SearchFilterProperties.Add(new SearchFilterProperty(token, path, options));

            foreach (var backend in m_SearchBackends.Values)
            {
                backend.AddSearchFilterProperty(token, path, options);
            }
        }
 /// <summary>
 /// Clears the internal state of the <see cref="SearchEngine"/>.
 /// </summary>
 public void Clear()
 {
     SearchDataProperties.Clear();
     SearchFilterProperties.Clear();
     m_SearchBackends.Clear();
 }