绊脚石乃是进身之阶。

ElasticSearch如何搜索数组?

Elasticsearch | 作者 me15000 | 发布于2016年06月19日 | 阅读数:23726

    public class TestEntity
{
public int ID { get; set; }
public int RootID { get; set; }
public string Path { get; set; }
public string Name { get; set; }

public string[] Tags { get; set; }
}
如何搜索这个Tags 呢, 精确搜索该怎么做?
 
目前我只能这样搜索,但是这样不对,如何指定字段呢?
  var request = new SearchRequest<TestEntity>
{
From = 0
,
Size = 10
,
Query = new QueryStringQuery { Query = "\"使命召唤1\"" }

};

var results = client.Search<TestEntity>(request);
var docs = results.Documents;


foreach (var item in docs)
{
Response.Write(":" + item.Name + "\r\n");
}
已邀请:

jerryhouse - 搜索工程师,技术网站:www.dcharm.com

赞同来自:

es搜索数组字段和搜索单值字段的方式是一样的,你提到搜索不对,不知道是什么不对,例如结果搜不到?一般这些情况和你创建索引时设置的分词方式有关。

martindu - 搜披露创始人

赞同来自:

var request = new SearchRequest<TestEntity>()
{
Size = 10,
Query = new MatchQuery()
{
Field = "tags",
Query = "使命召唤",
Type = "phrase"
}
};
var results = client.Search<TestEntity>(request);
foreach (var hit in results.Hits)
{
StringBuilder sb = new StringBuilder();
sb.Append("Tags: ");
foreach (var tag in hit.Source.Tags)
{
sb.Append(tag + "; ");
}
Console.WriteLine(sb.ToString());
}
最好写明要查询的字段,这里面是tags,注意ES会自动把T小写;查数组和查单个元素字段没啥区别。Query的话QueryString加双引号和MatchPhrase都可以,差异不大。取的时候我一般是从results.Hits里面取,Documents我没试过;注意查数组的时候Source里面的Tags是个数组,要遍历一下取出元素。
 
另外你是用的c#的NEST接口吧,这里不容易见到,有问题可随时联系我。

要回复问题请先登录注册