Search code examples
c#elasticsearchnestquerydsl

search query in elasticsearch with url in field


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

 }

Solution

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