настоящее время у меня это отображение в Elasticsearch, что я индексации с not_analyzed
поля:Elasticsearch/Lucene Regex fquery/QUERY_STRING не возвращает все документы
PUT /twitter/_mapping/tweet
{
"tweet": {
"properties" : {
"user" : {
"type" : "string",
"index": "not_analyzed"
}
}
}
}
PUT /twitter/tweet/1
{
"user": "CNN"
}
PUT /twitter/tweet/2
{
"user": "cnn"
}
PUT /twitter/tweet/3
{
"user": "Cnn"
}
PUT /twitter/tweet/4
{
"user": "cNN"
}
PUT /twitter/tweet/5
{
"user": "CnN"
}
Я хочу, чтобы произвести поиск по этому показателю с регистронезависимом фильтром как так (генерируется через NEST, так что не слишком гибок в изменении этого синтаксиса запросов):
POST /twitter/tweet/_search
{
"from": 0,
"size": 10,
"query": {
"filtered": {
"filter": {
"bool": {
"must": [
{
"fquery": {
"query": {
"query_string": {
"query": "user:/[cC][nN][nN]/"
}
}
}
}
]
}
}
}
}
}
этот запрос возвращает только 1 документы, хотя: "user": "cnn"
(в нижнем регистре), а не все документы.
Почему это? Тот же запрос с "query": "user:CNN"
возвращает правильный документ с правильным корпусом (в верхнем регистре).
EDIT: Кроме того, если я удалю документ с cnn
(в нижнем регистре), запрос ничего не возвращает.
EDIT 2: В случае, если это проблема с моим НЕСТ кодом, вот код, используемый для создания запроса:
// property path would be something like "user". queryTerm would be something like "cnn"
filterDescriptor.Query(
q =>
q.QueryString(
d =>
d.Query(string.Format("{0}:{1}", propertyPath,
GetCaseInsentitiveRegexExpression(queryTerm))))); // returns something like /[cC][nN][nN]/