ElasticSearch NEST替代C#.Contains()

时间:2014-11-20 15:01:07

标签: contains nest elasticsearch-net

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

  1. 索引包含Album类型的POCO,其中包含Artist,Title,Year
  2. 等字段
  3. 当用户输入搜索字词时,对于ex" 2",我应该获取上述字段包含搜索字词的相册
  4. 它应该与专辑标题匹配,例如" 2个州",艺术家如" 2 Pac"和年份" 2014,1992..etc"
  5. 我的代码工作正常,但我使用的是我相信会影响性能的野外代码。代码如下:

    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)
        );
    

    有任何改进查询的建议吗?

1 个答案:

答案 0 :(得分:1)

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

示例:How to search for a part of a word with ElasticSearch

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