gpt4 book ai didi

elasticsearch - 在Elasticsearch中将MinimumShouldMatch与术语查询结合​​使用

转载 作者:行者123 更新时间:2023-12-02 22:20:24 25 4
gpt4 key购买 nike

我正在巢中为 flex 搜索编写一个查询,该查询与国家/地区列表相匹配-只要列表中的任何国家/地区出现在ESCountryDescription(国家/地区列表)中,它就会严格匹配。我只想在CountryList中的所有国家都匹配ESCountryDescription时进行匹配。我相信我需要使用MinimumShouldMatch作为此示例http://www.elastic.co/guide/en/elasticsearch/reference/0.90/query-dsl-terms-query.html

a.Terms(t => t.ESCountryDescription, CountryList)

但是我找不到在上面的查询中添加MinimumShouldMatch的方法。

最佳答案

您可以在MinimumShouldMatch中应用TermsDescriptor参数。这是一个例子:

var lookingFor = new List<string> { "netherlands", "poland" };

var searchResponse = client.Search<IndexElement>(s => s
.Query(q => q
.TermsDescriptor(t => t.OnField(f => f.Countries).MinimumShouldMatch("100%").Terms(lookingFor))));

要么
var lookingFor = new List<string> { "netherlands", "poland" };

var searchResponse = client.Search<IndexElement>(s => s
.Query(q => q
.TermsDescriptor(t => t.OnField(f => f.Countries).MinimumShouldMatch(lookingFor.Count).Terms(lookingFor))));

这就是整个例子
class Program
{
public class IndexElement
{
public int Id { get; set; }
[ElasticProperty(Index = FieldIndexOption.NotAnalyzed)]
public List<string> Countries { get; set; }
}

static void Main(string[] args)
{
var indexName = "sampleindex";

var uri = new Uri("http://localhost:9200");
var settings = new ConnectionSettings(uri).SetDefaultIndex(indexName).EnableTrace(true);
var client = new ElasticClient(settings);

client.DeleteIndex(indexName);

client.CreateIndex(
descriptor =>
descriptor.Index(indexName)
.AddMapping<IndexElement>(
m => m.MapFromAttributes()));

client.Index(new IndexElement {Id = 1, Countries = new List<string> {"poland", "germany", "france"}});
client.Index(new IndexElement {Id = 2, Countries = new List<string> {"poland", "france"}});
client.Index(new IndexElement {Id = 3, Countries = new List<string> {"netherlands"}});

client.Refresh();

var lookingFor = new List<string> { "germany" };

var searchResponse = client.Search<IndexElement>(s => s
.Query(q => q
.TermsDescriptor(t => t.OnField(f => f.Countries).MinimumShouldMatch("100%").Terms(lookingFor))));
}
}

关于你的问题
  • 对于术语:“荷兰”,您将获得带有ID 3的文档
  • 对于术语:“波兰”和“france”,您将获得ID为1和2的文档
  • 对于术语:“德国”,您将获得ID为1的文档
  • 对于术语:“波兰”,“法国”和“德国”,您将获得文件
    与ID 1

  • 我希望这是你的意思。

    关于elasticsearch - 在Elasticsearch中将MinimumShouldMatch与术语查询结合​​使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29348024/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com