3

在我的个人项目从Redis迁移到 ElasticSearch 之后,我需要一些大师的帮助。基本要求如下:

  1. 索引包含专辑类型的 POCO,其中包含艺术家、标题、年份等字段
  2. 当用户输入搜索词时,例如“2”,我应该得到上述字段包含搜索词的专辑
  3. 它应该与“2 States”等专辑名称、“2 Pac”等艺术家和“2014,1992..etc”中的年份匹配

我的代码按预期工作,但我使用的是通配符,我相信这会影响性能。代码如下:

var results = Client.Search<Album>(body =>
    body.Query(query =>
        query.QueryString(qs =>
            qs.OnFieldsWithBoost(d => d
                .Add(f => f.AlbumName.ToLowerInvariant(), 5.0)
                .Add(f => f.AlbumTitle.ToLowerInvariant(), 2.0)
                )
                .Query(String.Format("{0}*", searchText))
            )
        )
        .Take(100)
    );

有什么改进查询的建议吗?

4

1 回答 1

1

您需要使用 Ngram 标记器创建索引。然后使用不带通配符的搜索字符串。

示例:如何使用 ElasticSearch 搜索单词的一部分

Ngram 标记器:http ://www.elasticsearch.org/guide/en/elasticsearch/reference/current/analysis-ngram-tokenizer.html

于 2014-11-24T18:56:52.437 回答