У меня есть индекс в лазурном поиске, который состоит из данных человека, таких как имя и фамилия.Как я могу ранжировать точные совпадения выше в лазурном поиске
Когда я ищу 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 }
}
}
]
}
Привет Матиас, я удивленные имена, как «Liebetrau» соответствует запросу «Рау», так как это, кажется, что вы ищете точный термин, а не суффиксом. Вы применяете пользовательский анализатор в поле LastName? Можете ли вы поделиться своим полным запросом и ответом, который вы получаете? – Yahnoosh
Возможно, вы правы. Я сам не создавал индекс, и я не мог воспроизвести поведение с новым индексом. Думаю, это невезение или я могу увидеть анализатор где-то?Когда я смотрю на определение индекса в лазуре на вкладке Analyzers нет записи –
Вы можете видеть анализаторы, когда вы смотрите на определение индекса с помощью REST API, GET/indexes/? Api-version = 2016- 09-01. Если стандартный анализатор используется в поле LastName, я бы не ожидал соответствия документов с именем, отличным от «Rau». –
Yahnoosh