elasticsearch NEST client, filed with attribute “not_analyzed” still be analyzed when search keywords contains hyphen

眉间皱痕 提交于 2020-01-02 07:28:07

问题


I have a class named "IndexModel":

public class IndexModel
{
    [ElasticProperty(Index= FieldIndexOption.NotAnalyzed, Store = true)]
    public string ModelNumber{ get; set; }
}

following is how i setup the elastic client:

var uri = new Uri("http://localhost:9200");
var config = new ConnectionSettings(uri);
var client = new ElasticClient(config);
client.Map<IndexModel>(m => m.MapFromAttributes());

I can see the mapped result from response:

Request {
"indexmodel": {
"properties": {

  "modelNumber": {
    "type": "string",
    "store": true,
    "index": "not_analyzed"
     },
    }
  }
}

and i have one index record for this type, the value of "ModelNumber" property is "test-123", and following is my query:

var result = client.Search<IndexModel>(s => s.Query(new TermQuery() { Field = Property.Path<IndexModel>(it => it.ModelNumber), Value = "test-123"}));

here is the final mapped request i got:

Method: POST, 
Url: http://localhost:9200/_search, 
Request: {
  "query": {
    "term": {
      "modelNumber": {
        "value": "test-123"
      }
    }
  }
}

But i can not get the result, if i change the value of "ModelNumber" property to "test123", re-index it, and search it by keywords "test123", then it's works, so i think the analyzer still analyzed the "ModelNumber" property, can someone help me, thanks.


回答1:


I had the same problem, the solution is first create the index then put the mapping and at last add your data.

Add Type Attribute to your model field

 [ElasticProperty(OmitNorms = true, Index = FieldIndexOption.NotAnalyzed)]

        var node = new Uri("http://192.168.0.56:9200/");
        var settings = new ConnectionSettings(node, defaultIndex: "ticket");
        var client = new ElasticClient(settings);

        var createIndexResult = client.CreateIndex("ticket");
        var mapResult = client.Map<TicketElastic>(c => c.MapFromAttributes().IgnoreConflicts().Type("TicketElastic").Indices("ticket"));


来源:https://stackoverflow.com/questions/25303338/elasticsearch-nest-client-filed-with-attribute-not-analyzed-still-be-analyzed

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!