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もあります 要旨 スニペット付き
#最良の賭け同義語ワイルドカードクエリ #エピソーバー開発