2017-01-10 4 views
0

У меня есть индекс в лазурном поиске, который состоит из данных человека, таких как имя и фамилия.Как я могу ранжировать точные совпадения выше в лазурном поиске

enter image description here

enter image description here Когда я ищу 3 буквенных lastnames с запросом, как

rau&searchFields=LastName 

/indexes/customers-index/docs?api-version=2016-09-01&search=rau&searchFields=LastName 

Наименование Рау встречается, но это довольно далеко в конце.

{ 
"@odata.context": "myurl/indexes('customers-index')/$metadata#docs(ID,FirstName,LastName)", 
"value": [ 
    { 
     "@search.score": 8.729204, 
     "ID": "someid", 
     "FirstName": "xxx", 
     "LastName": "Liebetrau" 
    }, 
    { 
     "@search.score": 8.729204, 
     "ID": "someid", 
     "FirstName": "xxx", 
     "LastName": "Damerau" 
    }, 
    { 
     "@search.score": 8.729204, 
     "ID": "someid", 
     "FirstName": "xxx", 
     "LastName": "Rau" 

Наверху указаны такие имена, как «Liebetrau», «Damerau».

Есть ли способ иметь точные соответствия наверху?

РЕДАКТИРОВАТЬ

Запрашивание определение индекса с использованием RestApi

GET https://myproduct.search.windows.net/indexes('customers-index')?api-version=2015-02-28-Preview 

возвращенное для ЬазШате

"name": "LastName", 
    "type": "Edm.String", 
    "searchable": true, 
    "filterable": true, 
    "retrievable": true, 
    "sortable": true, 
    "facetable": true, 
    "key": false, 
    "indexAnalyzer": "prefix", 
    "searchAnalyzer": "standard", 
    "analyzer": null, 
    "synonymMaps": [] 

Редактировать 1

Определение анализатор

 "scoringProfiles": [], 
    "defaultScoringProfile": null, 
    "corsOptions": null, 
    "suggesters": [], 
    "analyzers": [ 
    { 
     "name": "prefix", 
     "tokenizer": "standard", 
     "tokenFilters": [ 
     "lowercase", 
     "my_edgeNGram" 
     ], 
     "charFilters": [] 
    } 
    ], 
    "tokenizers": [], 
    "tokenFilters": [ 
    { 
     "name": "my_edgeNGram", 
     "minGram": 2, 
     "maxGram": 20, 
     "side": "back" 
    } 
    ], 
    "charFilters": [] 

Edit 2

В конце задания ScoringProfile, что я использую при е запрашивая сделал трюк

{ 
    "name": "person-index", 
    "fields": [ 

     { 
     "name": "ID", 
     "type": "Edm.String", 
     "searchable": false, 
     "filterable": true, 
     "retrievable": true, 
     "sortable": true, 
     "facetable": true, 
     "key": true, 
     "indexAnalyzer": null, 
     "searchAnalyzer": null, 
     "analyzer": null 

    } 
    , 
    { 
     "name": "LastName", 
     "type": "Edm.String", 
     "searchable": true, 
     "filterable": true, 
     "retrievable": true, 
     "sortable": true, 
     "facetable": true, 
     "key": false, 
     "analyzer": "my_standard" 

    }, 
    { 
     "name": "PartialLastName", 
     "type": "Edm.String", 
     "searchable": true, 
     "filterable": true, 
     "retrievable": true, 
     "sortable": true, 
     "facetable": true, 
     "key": false, 
     "indexAnalyzer": "prefix", 
     "searchAnalyzer": "standard", 
     "analyzer": null 

    } 
    ], 
    "analyzers":[ 
    { 
     "name":"my_standard", 
     "@odata.type":"#Microsoft.Azure.Search.CustomAnalyzer", 
     "tokenizer":"standard_v2", 
     "tokenFilters":[ "lowercase", "asciifolding" ] 
    }, 
    { 
     "name":"prefix", 
     "@odata.type":"#Microsoft.Azure.Search.CustomAnalyzer", 
     "tokenizer":"standard_v2", 
     "tokenFilters":[ "lowercase", "my_edgeNGram" ] 
    } 
    ], 
    "tokenFilters":[ 
    { 
     "name":"my_edgeNGram", 
     "@odata.type":"#Microsoft.Azure.Search.EdgeNGramTokenFilterV2", 
     "minGram":2, 
     "maxGram":20, 
     "side": "back" 
    } 
    ], 
    "scoringProfiles":[ 
    { 
    "name":"exactFirst", 
    "text":{ 
     "weights":{ "LastName":2, "PartialLastName":1 }  
    } 
    } 
] 
} 
+0

Привет Матиас, я удивленные имена, как «Liebetrau» соответствует запросу «Рау», так как это, кажется, что вы ищете точный термин, а не суффиксом. Вы применяете пользовательский анализатор в поле LastName? Можете ли вы поделиться своим полным запросом и ответом, который вы получаете? – Yahnoosh

+0

Возможно, вы правы. Я сам не создавал индекс, и я не мог воспроизвести поведение с новым индексом. Думаю, это невезение или я могу увидеть анализатор где-то?Когда я смотрю на определение индекса в лазуре на вкладке Analyzers нет записи –

+0

Вы можете видеть анализаторы, когда вы смотрите на определение индекса с помощью REST API, GET /indexes/? Api-version = 2016- 09-01. Если стандартный анализатор используется в поле LastName, я бы не ожидал соответствия документов с именем, отличным от «Rau». – Yahnoosh

ответ

1

Анализатор «префикс» установлен на поле LastName производит следующие термины для названия Liebetrau: au, rau, trau, etrau, betrau, ebetrau, iebetrau, libetrau. Это edge ngrams длиной от 2 до 20, начиная с обратной стороны слова, как определено в маркете токенов my_edgeNGram в определении вашего индекса. Анализатор будет обрабатывать другие имена таким же образом. Когда вы ищете имя rau, оно соответствует всем именам, поскольку все они заканчиваются этими символами. Вот почему все документы в вашем результирующем наборе имеют одинаковый показатель соответствия.

Вы можете проверить конфигурацию анализатора, используя Analyze API.

Чтобы узнать больше о пользовательских анализаторах, пожалуйста, перейдите на страницу here и here.

Надежда, что помогает

+0

Спасибо, что дает понять. Будет ли еще способ иметь точные соответствия поискового термина больше в верхней части? –

+0

Теперь я увидел, что идея использовать краевые ngrams произошла благодаря просмотру видео https://channel9.msdn.com/Shows/Data-Exposed/Custom-Analyzers-Search-Analytics--Portal-Querying-in-Azure- Поиск. Похоже, это хорошая идея, потому что она находит больше записей. Я предполагаю, что у меня будет два поля, в которых один запрашивается анализатором по умолчанию, а второй - ngram. В клиенте я бы совпадал с результатами анализатора по умолчанию в верхней части. Кстати, видео, которые вы делали для виртуальной академии, потрясающе! –

+0

Я нашел вашу статью, которая объясняет мою точную проблему, когда вы добавили оценочный профиль для ранжирования точных совпадений выше. Ницца. https://azure.microsoft.com/de-de/blog/custom-analyzers-in-azure-search/ –

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