Elasticsearch将数字搜索为字符串

时间:2020-06-18 14:01:01

标签: elasticsearch nest

我有一个对象-4:00:00,具有属性Organization,我想将其作为字符串进行搜索,例如 搜索字符串 12 会返回带有int NumberNumber = 12等的组织... 现在,如果我设置Number = 5123,则会在所有字段中都包含123的结果中,但是搜索非数字字符,例如“ goo”失败,出现searchStr = "123"

这是组织对象:

System.Exception: Invalid elasticSearch response

以及创建索引的代码:

public class Organization
{
    public int? Id { get; set; }
    public string Name { get; set; }
    public string SecondName { get; set; }
    public int Number { get; set; }
}

这是搜索“查询”:

var indexState = new IndexState();
var indexSettings = new IndexSettings();
indexSettings.Analysis = new Analysis();
indexSettings.Analysis.Analyzers = new Analyzers();

var customAnalyzer = GetStandardAsciifoldingAnalyzer();

indexSettings.Analysis.Analyzers.Add(STANDARD_ASCIIFOLDING_ANALYZER_NAME, customAnalyzer);

indexState.Settings = indexSettings;

var response = await _elasticClient.Indices.CreateAsync(indexName, index => index
    .InitializeUsing(indexState).Map<Organization>(
        x => x.Properties(ps => ps
            .Number(s => s
                .Name(n => n.Id)
                .Type(NumberType.Integer)
            )
            .SearchAsYouType(s => s
                .Name(n => n.Name)
                .Analyzer(STANDARD_ASCIIFOLDING_ANALYZER_NAME)
            )
            .Text(s => s
                .Name(n => n.SecondName)
                .Fields(f => f
                    .Text(tt => tt
                        .Name("ngram")
                        .Analyzer("ngram_analyzer")
                    )
                )
            )
            .Text(s => s
                .Name(n => n.Number.ToString())
                .Fields(f => f
                    .Text(tt => tt
                        .Name("ngram")
                        .Analyzer("ngram_analyzer")
                    )
                )
            )
        )
    )
);

我们将不胜感激任何帮助。

0 个答案:

没有答案