Я смотрел на другие вопросы, связанные с этой проблемой, но, похоже, это не помогло.
Мне нужно изменить ввод "i phone" или "i Phone" назапрос «iPhone» в Elasticsearch.
Как вы можете видеть, я перепробовал почти все, что только мог придумать, включая просто «phone => iPhone» и оставив там «i», чтобы побыть там и, возможно, добавитьэто к стоп-словам.
Я пытался использовать «простой», «ключевое слово», «стандартный» и «пробел» для моего пользовательского анализатора.
Может кто-нибудь заметить, где я ошибся, это последняя проблема, прежде чем я смогу закончить свой проект, чтобы он был оценен.Спасибо
PS Бонусные баллы, если вы включите, как я могу сделать автоматическое предложение на входах, спасибо
Ниже мой код
public static CreateIndexDescriptor GetMasterProductDescriptor(string indexName = "shopmaster")
{
var indexDescriptor = new CreateIndexDescriptor(indexName)
.Settings(s => s
.Analysis(a => a
.TokenFilters(t => t
.Stop("my_stop", st => st
.StopWords("_english_", "new", "cheap")
.RemoveTrailing()
)
.Synonym("my_synonym", st => st
.Synonyms(
"phone => iPhone"
//"i phone => iPhone",
//"i Phone => iPhone"
)
)
.Snowball("my_snowball", st => st
.Language(SnowballLanguage.English)
)
)
.Analyzers(an => an
.Custom("my_analyzer", ca => ca
.Tokenizer("simple")
.Filters(
"lowercase",
"my_stop",
"my_snowball",
"my_synonym"
)
)
)
)
)
.Mappings(
ms => ms.Map<MasterProduct>(
m => m.AutoMap()
.Properties(
ps => ps
.Nested<MasterProductAttributes>(p => p.Name(n => n.MasterAttributes))
.Nested<MasterProductAttributes>(p => p.Name(n => n.ProductAttributes))
.Nested<MasterProductAttributeType>(p => p.Name(n => n.MasterAttributeTypes))
.Nested<Feature>(p => p.Name(n => n.Features))
.Nested<RelatedProduct>(p => p.Name(n => n.RelatedProducts))
.Nested<MasterProductItem>(
p => p.Name(
n => n.Products
)
.Properties(prop => prop.Boolean(
b => b.Name(n => n.InStock)
))
)
.Boolean(b => b.Name(n => n.InStock))
.Number(t => t.Name(n => n.UnitsSold).Type(NumberType.Integer))
.Text(
tx => tx.Name(e => e.ManufacturerName)
.Fields(fs => fs.Keyword(ss => ss.Name("manufacturer"))
.TokenCount(t => t.Name("MasterProductId")
.Analyzer("my_analyzer")
)
)
.Fielddata())
//.Completion(cm=>cm.Analyzer("my_analyser")
)
)
);
return indexDescriptor;
}