2013-12-07 5 views
5

У меня есть индекс, содержащий field видео со значением 1.flv. Если я сделаю следующий запрос:Elasticsearch query_string точное соответствие

"query": { 
    "query_string": { 
     "query": "2.flv" 
    } 
} 

запрос все еще возвращает все записи с 1.flv.

Может ли кто-нибудь указать мне на правильное решение?

Вот выборочные данные, возвращаемые для 1.flv (как вы можете видеть, ничего не содержит 2.flv!)

"hits" : { 
    "total" : 8, 
    "max_score" : 0.625, 
    "hits" : [ { 
     "_index" : "videos", 
     "_type" : "comment", 
     "_id" : "_meta", 
     "_score" : 0.625, 
     "fields" : { 
     "video" : "1.flv", 
     "body" : "Really?" 
     } 
    }, { 
     "_index" : "videos", 
     "_type" : "comment", 
     "_id" : "0fYsYOTHT7O-7P6CVi7l3w", 
     "_score" : 0.625, 
     "fields" : { 
     "video" : "1.flv", 
     "body" : "fadsfasfas" 
     } 
    }, { 
     "_index" : "videos", 
     "_type" : "comment", 
     "_id" : "O9VjgFdmQra6hYxwMdGuTg", 
     "_score" : 0.48553526, 
     "fields" : { 
     "video" : "1.flv", 
     "body" : "Search is hard. Search should be easy." 
     } 
    }, { 
     "_index" : "videos", 
     "_type" : "comment", 
     "_id" : "A6k3FEKKSzKTSAVIT-4EbA", 
     "_score" : 0.48553526, 
     "fields" : { 
     "video" : "1.flv", 
     "body" : "Really?" 
     } 
    }, { 
     "_index" : "videos", 
     "_type" : "comment", 
     "_id" : "eFnnM4PrTSyW6wfxHWdE8A", 
     "_score" : 0.48553526, 
     "fields" : { 
     "video" : "1.flv", 
     "body" : "Hello!" 
     } 
    }, { 
     "_index" : "videos", 
     "_type" : "comment", 
     "_id" : "ZogAiyanQy6ddXA3o7tivg", 
     "_score" : 0.48553526, 
     "fields" : { 
     "video" : "1.flv", 
     "body" : "dcxvxc" 
     } 
    }, { 
     "_index" : "videos", 
     "_type" : "comment", 
     "_id" : "O0HcT7aGTrqKQxF25KsOwQ", 
     "_score" : 0.37158427, 
     "fields" : { 
     "video" : "1.flv", 
     "body" : "Hello!" 
     } 
    }, { 
     "_index" : "videos", 
     "_type" : "comment", 
     "_id" : "l2d53OFITb-etooWEAI0_w", 
     "_score" : 0.37158427, 
     "fields" : { 
     "video" : "1.flv", 
     "body" : "dasdas" 
     } 
    } ] 
    } 
} 
+0

Можете ли вы опубликовать свое сопоставление и ожидаемый результат? – moliware

+0

А также настройки анализатора? – shyos

+0

@shyos Я не уверен, как я могу его получить. Мне нужно точное совпадение 1.flv 1.flv и 2.flv точное соответствие ТОЛЬКО 2.flv (не 1.flv) – user2786037

ответ

6

То, что вы видите, является результатом стандартной Tokenizer (часть по умолчанию/стандартный анализатор), который символизирует, среди прочего, символ периода (.). См. this play для быстрого примера того, как он анализируется.

Существует много способов выполнить то, что вы хотите, с помощью Elasticsearch, например, обновление отображения и изменение анализатора для поля video, например, анализатора keyword, как упомянуто выше, возможно, с использованием типа многополюсного поля, index: not_analyzed и т. Д., Но простое решение, которое может работать достаточно хорошо для вас, заключается в том, чтобы убедиться, что используется оператор AND.

По умолчанию query string query использует OR оператора:

default_operator: оператор, используемый по умолчанию, если не указан явный оператор. Например, с оператором по умолчанию OR, капитал запроса Венгрии переводится в капитал OR OR или Венгрии и с оператором по умолчанию из AND, тот же запрос переводится в капитал AND AND AND Hungary. Значение по умолчанию - OR.

Таким образом, будь явным с оператором или установите его как значение по умолчанию. This play также показывает обе эти методы в действии (поиск # 1 и поиск # 2-вкладки в нижней правой панели).

+0

+1 для оператора по умолчанию, который я каким-то образом забыл ... – Dror

Смежные вопросы