asp.net ElasticSearch:通配符空格键检测

wribegjk  于 2023-02-26  发布在  .NET
关注(0)|答案(1)|浏览(131)

我想在elasticsearch中搜索,就像在sql server中一样。这就是我想要做的查询。
从名称类似“%samsung a50%”的产品中选择 *
我可以用下面的c#代码来完成这个查询。
c编号:

var urunler = elasticClient.Search<Urun>
      (s => s.From(0)
       .Query(query => query.Bool(b => b.Must(
        x => x.Wildcard(x => x.Field("ad").Value("*" + value + "*"))
          )))).Documents.ToList();

但是它不查询单词之间是否有空格。例如,如果我搜索单词“三星”,它找到了它。但是它没有找到单词“三星a50”。因为在“三星”和“a50”之间有空格。我希望它找到即使有空格。我怎么做呢?请用c#代码显示。
它也应该能够像现在这样过滤我按下字母的瞬间。它也应该能够检测空格键。当然,也应该有大写。

2wnc66cl

2wnc66cl1#

我认为解决问题的关键是设置模糊查询的准确性。如以下代码:

Fuzziness.AutoLength(1, 2)

Fuzziness.AutoLength(1, 2)指定编辑距离的最小值为1,最大值为2,这意味着Elasticsearch将尝试匹配至少1个字符但不超过2个字符的查询字符串。
您可以根据实际需要调整精度。

public IList<ArticleModel> GetSearch(string keyword)
    {

        var result = _elasticClient.Search<ArticleModel>(s => s.From(0)

        .Query(q => q
                .Match(m => m
                    .Field(f => f.Title)
                    .Fuzziness(Fuzziness.AutoLength(1, 2))
                    .Query(keyword)
                )
        )

        ).Documents.ToList();

        var finalContent = result;
        return finalContent;
    }

MatchFuzziness来执行模糊搜索以匹配单词和空格应该是最佳解决方案。

样品

var urunler = _elasticClient.Search<Urun>(s => s
    .From(0)
    .Query(q => q
        .Bool(b => b
            .Must(
                m => m.Match(mt => mt
                    .Field("ad")
                    .Query(value)
                    .Fuzziness(Fuzziness.Auto)
                )
            )
        )
    )
).Documents.ToList();

相关问题