0
votes

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; }

 }
1

1 Answers

0
votes

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"
      }
   }
}