Tha*_*aja 3 .net elasticsearch nest
我正在使用Nest,这是一个用于弹性搜索的.Net客户端.我在搜索GUID时遇到问题.由于GUID具有" - ",因此elasticsearch正在考虑作为令牌.
以下是我面临的问题.
我有一个具有以下属性的实体"员工".
Id : Guid
Name : varchar
DepartmentId : Guid (E.g cb5d39ee-05f0-4351-baba-8eed6c9111ad)
Run Code Online (Sandbox Code Playgroud)
现在我需要获得属于特定部门的员工列表.所以我将通过部门ID.
由于DepartmentId中有一个" - ",因此elasticsearch正在考虑作为一个分隔符,因为我无法得到结果.
员工班
public class Employee
{
public Guid Id { get; set; }
public string Name { get; set; }
[ElasticProperty(Analyzer = "keyword")]
public Guid DepartmentId { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
下面是示例代码.
class Program
{
static string indexName = "Elasticsearchsamples".ToLowerInvariant();
private static void IndexEmployees()
{
List<Employee> employees = new List<Employee>();
Employee employee;
var deptId = new Guid("cb5d39ee-05f0-4351-baba-8eed6c9111ad");
employee = new Employee()
{
Id = Guid.NewGuid(),
Name = "Raja",
DepartmentId = deptId
};
employees.Add(employee);
employee = new Employee()
{
Id = Guid.NewGuid(),
Name = "Ram",
DepartmentId = deptId
};
employees.Add(employee);
employee = new Employee()
{
Id = Guid.NewGuid(),
Name = "Guru",
DepartmentId = Guid.NewGuid()
};
employees.Add(employee);
if (SearchClient.IsConnected())
{
SearchClient.ElasticClientInstance.DeleteIndex(indexName);
var result = SearchClient.ElasticClientInstance.IndexMany(employees, indexName);
}
}
private static void SearchEmployees()
{
var searchDescriptor = new SearchDescriptor<Employee>();
searchDescriptor.Index(indexName);
var deptId = new Guid("cb5d39ee-05f0-4351-baba-8eed6c9111ad");
searchDescriptor.Query(qq => qq.Term(x => x.DepartmentId, deptId.ToString().ToLowerInvariant()));
//searchDescriptor.Query(qq => qq.Term(x => x.Name, "raja"));
var result = SearchClient.ElasticClientInstance.Search(searchDescriptor);
Console.WriteLine(result.Total);
}
static void Main(string[] args)
{
System.Net.ServicePointManager.Expect100Continue = false;
IndexEmployees();
SearchEmployees();
Console.Read();
}
}
Run Code Online (Sandbox Code Playgroud)
Pai*_*ook 11
在您的Employee类中,您需要告诉Elasticsearch不要分析DepartmentId字段或使用关键字分析器.请注意,关键字分析器的文档建议如下:
类型关键字的分析器,将整个流"标记"为单个标记.这对于诸如邮政编码,ID等数据非常有用.请注意,使用映射定义时,将字段标记为not_analyzed可能更有意义.
您可以执行以下任一操作,如下所示:
//do not analyze the value
[ElasticProperty(Index = FieldIndexOption.not_analyzed)]
public Guid DepartmentId;
//use keyword analyzer
[ElasticProperty(Analyzer = "keyword")]
public Guid DepartmentId;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3568 次 |
| 最近记录: |