在字段中使用 url 在 elasticsearch 中搜索查询

search query in elasticsearch with url in field

我必须在弹性搜索的索引数据中搜索文件位置路径。我以编码格式索引了位置路径(也尝试过不编码)。下面的查询 returns 所有索引数据没有做任何匹配。如果我用 idtitle 字段搜索,它 returns 正确 result.Do 有人知道吗?

{
"query": {
     "match": {
     "location": "%5c%5c25.94.150.212%5cfoldername%5cintroduction_to_c_sharp.ppt"
    }
}
}

我从浏览器得到的响应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": {}
  }
}

创建有一个字段附件的索引代码:

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

要索引的属性

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

 }

如果您的 location 字段是 not_analyzed,您可以使用 term 查询而不是 match

{
   "query": {
      "term": {
         "location": "%5c%5c25.94.150.212%5cfoldername%5cintroduction_to_c_sharp.ppt"
      }
   }
}

否则,您需要将 location 字段设为 not_analyzed(见下文)并重新索引您的数据。

PUT your_index/_mapping/your_type
{
  "properties": {
    "location": {
      "type": "string"
      "fields": {
        "raw": {
          "type": "string",
          "index": "not_analyzed"
        }
      }
    }
  }
}

然后你可以使用下面的term查询

{
   "query": {
      "term": {
         "location.raw": "%5c%5c25.94.150.212%5cfoldername%5cintroduction_to_c_sharp.ppt"
      }
   }
}