日本語版
最新ニュース
企業

最良の賭け、同義語、ワイルドカードクエリ – エピソーバー開発

「search.for(query+”*”)」などの検索クエリでワイルドカードを使用する場合、または提案されている逆方式の方法を使用した場合 壊れた変更記事 最良の賭けと同義語は動作を停止します/リクエストのクエリを検索するため、機能しません。 以下のようなカスタムiPhraseCriterionを使用して登録することにより、最善の策を「固定」することができます [EPiServerDataStore( AutomaticallyRemapStore = true, AutomaticallyCreateStore = true, StoreName = "EPiServer.Find.Framework.BestBets.DefaultPhraseCriterion" )] public class WildCardPhraseCriterion : DefaultPhraseCriterion, IPhraseCriterion { public override bool Match(string searchPhrase) { if (string.IsNullOrWhiteSpace(searchPhrase) || Phrase == null) { return false; }…

最良の賭け、同義語、ワイルドカードクエリ – エピソーバー開発

1738245457
2025-01-28 19:00:00

「search.for(query+”*”)」などの検索クエリでワイルドカードを使用する場合、または提案されている逆方式の方法を使用した場合 壊れた変更記事 最良の賭けと同義語は動作を停止します/リクエストのクエリを検索するため、機能しません。

以下のようなカスタムiPhraseCriterionを使用して登録することにより、最善の策を「固定」することができます

[EPiServerDataStore(
    AutomaticallyRemapStore = true,
    AutomaticallyCreateStore = true,
    StoreName = "EPiServer.Find.Framework.BestBets.DefaultPhraseCriterion"
)]
public class WildCardPhraseCriterion : DefaultPhraseCriterion, IPhraseCriterion
{
    public override bool Match(string searchPhrase)
    {
        if (string.IsNullOrWhiteSpace(searchPhrase) || Phrase == null)
        {
            return false;
        }

        // Remove wildcard
        string cleanedSearchPhrase = searchPhrase.Replace("*", string.Empty).Replace("?", string.Empty);

        return base.Match(cleanedSearchPhrase);
    }
}

同義語の場合、Find内の拡張機能のカスタムバージョンを作成する必要があります。ただし、この過負荷は、デフォルトで発見されたQueryStringSearchExtensionsにあるはずです。

public static IQueriedSearch UsingSynonyms(
    this IQueriedSearch search, string queryString)
{
    search.ValidateNotNullArgument(nameof (search));

    if (search.Client.Settings.Admin)
    {
        return new Search(search, context =>
        {
            if (!(context.RequestBody.Query is QueryStringQuery query2))
            {
                Trace.Instance.Add(new TraceEvent(search, "The use of synonyms are only supported för QueryStringQueries, i.e. with the use of the .For() -extensions. The query will be executed without the use of synonyms.")
                {
                    IsError = false
                });
            }
            else
            {
                string str = queryString ?? string.Empty;
                
                ((QueryStringQuery) context.RequestBody.Query).Query = str.Replace(' ', '¤');

                MultiFieldQueryStringQuery queryStringQuery = query2 as MultiFieldQueryStringQuery;

                if (queryStringQuery.IsNull())
                {
                    ((QueryStringQuery) context.RequestBody.Query).Analyzer = "synonym";
                }
                else if (queryStringQuery.Fields.Except(["_all"]).Any())
                {
                    ((QueryStringQuery) context.RequestBody.Query).Analyzer = context.Analyzer?.SynonymQueryAnalyzer;
                }
                else
                {
                    ((QueryStringQuery) context.RequestBody.Query).Analyzer = "synonym";
                }
            }
        });
    }

    Trace.Instance.Add(new TraceEvent(search, "Your index does not support synonyms. Please contact support to have your account upgraded. Falling back to search without synonyms.")
    {
        IsError = false
    });

    return new Search(search, context => { });
}

または、拡張機能でクエリをクリーンアップするだけで、私たちのほとんどがやったと思います

public static IQueriedSearch UsingSynonyms(
  this IQueriedSearch search)
{
  search.ValidateNotNullArgument(nameof (search));
  if (search.Client.Settings.Admin)
    return (IQueriedSearch) new Search((ISearch) search, (Action) (context =>
    {
      if (!(context.RequestBody.Query is QueryStringQuery query2))
      {
        Trace.Instance.Add((ITraceEvent) new TraceEvent((ITraceable) search, "The use of synonyms are only supported för QueryStringQueries, i.e. with the use of the .For() -extensions. The query will be executed without the use of synonyms.")
        {
          IsError = false
        });
      }
      else
      {
        string str = (query2.Query ?? (FieldFilterValue) string.Empty).ToString();
		
        // If you used the reverse method as described in https://docs.developers.optimizely.com/digital-experience-platform/v1.1.0-search-and-navigation/docs/breaking-changes-for-find15
        // You will need to reverse that again, else no match will be found ever
        // new string(searchPhrase.Reverse().ToArray())
	
        // Remove wildcard
        string cleanedSearchPhrase = str.Replace("*", string.Empty).Replace("?", string.Empty);
		
        ((QueryStringQuery) context.RequestBody.Query).Query = (FieldFilterValue) cleanedSearchPhrase.Replace(' ', '¤');

        MultiFieldQueryStringQuery queryStringQuery = query2 as MultiFieldQueryStringQuery;
        if (queryStringQuery.IsNull())
          ((QueryStringQuery) context.RequestBody.Query).Analyzer = "synonym";
        else if (queryStringQuery.Fields.Except((IEnumerable) new string[1]
        {
          "_all"
        }).Any())
          ((QueryStringQuery) context.RequestBody.Query).Analyzer = context.Analyzer?.SynonymQueryAnalyzer;
        else
          ((QueryStringQuery) context.RequestBody.Query).Analyzer = "synonym";
      }
    }));
  Trace.Instance.Add((ITraceEvent) new TraceEvent((ITraceable) search, "Your index does not support synonyms. Please contact support to have your account upgraded. Falling back to search without synonyms.")
  {
    IsError = false
  });
  return (IQueriedSearch) new Search((ISearch) search, (Action) (context => { }));
}

aもあります 要旨 スニペット付き

発行 ジェロエン

私はオランダに拠点を置く.NET開発者です。私は最適化のMVP、SME、Microsoft認定プロフェッショナル開発者です。
Jeroenによるすべての投稿を表示します

#最良の賭け同義語ワイルドカードクエリ #エピソーバー開発

執筆者について: nipponese

Nipponese News編集部は、国内外のニュースを日本語で分かりやすくお届けします。