2016-06-02 6 views
2

Я использую Azure поиск и пытаемся выполнить поиск с документами:Azure Поиск и черточка

Кажется, что делает это: /indexes/blah/docs?api-version=2015-02-28&search=abc\-1003

возвращает те же результаты, как это: /indexes/blah/docs?api-version=2015-02-28&search=abc-1003

не должна Первый из них возвращает разные результаты, чем второй, из-за ускользающей обратной косой черты? Из того, что я понимаю, обратная косая черта должна обеспечивать точный поиск по всей строке «abc-1003» вместо того, чтобы делать оператор «не».

(подробнее здесь: https://msdn.microsoft.com/en-us/library/azure/dn798920.aspx)

Единственный способ, которым я могу заставить его работать, делая это (обратите внимание на двойные кавычки): /indexes/blah/docs?api-version=2015-02-28&search="abc-1003"

Я предпочел бы не делать, потому что это будет означать в результате чего пользователь вводит в кавычки, которые они не будут знать, как это сделать.

Я ожидаю чего-то, чего я не должен или это может быть ошибка с Azure Search?

+1

Возможно, я слепой, но ... Я не вижу разницы в двух строках поиска в вашем вопросе. –

ответ

2

Во-первых, тире, не предваряемой пробелом, действует как тире, а не оператор отрицания.

В соответствии с Документами MSDN для simple query syntax

- Only needs to be escaped if it's the first character after whitespace, not if it's in the middle of a term. For example, "wi-fi" is a single term 

Во-вторых, если вы не используете custom analyzer for your index, тире будет рассматриваться анализатором почти как белого пространства и сломается abc-1003 на две лексемы , abc и 1003.

Затем, когда вы положите его в кавычки "abc-1003", он будет рассматриваться как поиск фразы abc 1003, таким образом возвращая то, что вы ожидаете.

Если вы хотите, чтобы точное совпадение на abc-1003, подумайте об использовании фильтра. Это быстрее и может сопоставлять такие вещи, как подсказки или текст с тире

+0

Благодарим вас за информацию о том, как она относится к тире. Я просмотрел пользовательский анализатор и, похоже, он определенно удовлетворит мои потребности. Цените помощь. – caj

0

Добавляя к ответу Шона, пользовательская конфигурация анализа с ключевым словом tokenizer и нижний регистр tokenfilter будет решать эту проблему. Похоже, что вы используете стандартный анализатор по умолчанию, который разбивает слова со специальными символами во время лексического анализа при индексировании. Во время запроса этот лексический анализ применяется к обычным запросам, а не к поисковым запросам. В результате в вашем примере у вас есть и < 1003> в индексе поиска и поисковый запрос подстановки, который не был промаркирован таким же образом и ищет термины, которые начинаются с abc-1003, не находит его, потому что ни одно из условий в индекс начинается с abc-1003. Надеюсь, это имеет смысл. Пожалуйста, дайте мне знать, если у вас возникнут дополнительные вопросы.

Nate