I have to search a file location path in the indexed data of an elastic search. I indexed the location path in an encoded format(tried without encoding also). The below query returns all the indexed data without doing any match. If I search with id or title field, it returns correct result.Do anyone have any idea?
{
"query": {
"match": {
"location": "%5c%5c25.94.150.212%5cfoldername%5cintroduction_to_c_sharp.ppt"
}
}
}
Response I got from browser http://localhost:9200/documents
{
"documents": {
"aliases": {},
"mappings": {
"indexdocument": {
"properties": {
"document": {
"type": "attachment",
"fields": {
"content": {
"type": "string"
},
"author": {
"type": "string"
},
"title": {
"type": "string",
"term_vector": "with_positions_offsets"
},
"name": {
"type": "string"
},
"date": {
"type": "date",
"format": "strict_date_optional_time||epoch_millis"
},
"keywords": {
"type": "string"
},
"content_type": {
"type": "string"
},
"content_length": {
"type": "integer"
},
"language": {
"type": "string"
}
}
},
"documentType": {
"type": "string"
},
"id": {
"type": "long"
},
"lastModifiedDate": {
"type": "date",
"format": "strict_date_optional_time||epoch_millis"
},
"location": {
"type": "string"
},
"title": {
"type": "string"
}
}
}
},
"settings": {
"index": {
"creation_date": "1465193502636",
"number_of_shards": "5",
"number_of_replicas": "1",
"uuid": "5kCRvhmsQAGyndkswLhLrg",
"version": {
"created": "2030399"
}
}
},
"warmers": {}
}
}
Create Index code which is having one field attachment:
public void CreateDocumentIndex()
{
this.client.CreateIndex("documents", c => c.Mappings(mp=>mp.Map<IndexDocument>
(m => m.Properties(ps => ps.Attachment
(a => a.Name(o => o.Document)
.TitleField(t => t.Name(x => x.Title).TermVector(TermVectorOption.WithPositionsOffsets))
)))));
}
Properties to index
public class IndexDocument
{
public long Id { get; set; }
public string Title { get; set; }
public string DocumentName { get; set; }
// Base64-encoded file content.
public string Document { get; set; }
public string DocumentType { get; set; }
[Nest.String(Store = true, Index = Nest.FieldIndexOption.NotAnalyzed)]
public string Location { get; set; }
public DateTime LastModifiedDate { get; set; }
}
If your location
field is not_analyzed
, you can use a term
query instead of a match
.
{
"query": {
"term": {
"location": "%5c%5c25.94.150.212%5cfoldername%5cintroduction_to_c_sharp.ppt"
}
}
}
Otherwise, you need to make your location
field not_analyzed
(see below) and reindex your data.
PUT your_index/_mapping/your_type
{
"properties": {
"location": {
"type": "string"
"fields": {
"raw": {
"type": "string",
"index": "not_analyzed"
}
}
}
}
}
Then you can use the below term
query
{
"query": {
"term": {
"location.raw": "%5c%5c25.94.150.212%5cfoldername%5cintroduction_to_c_sharp.ppt"
}
}
}