Я понимаю, что функция объяснения Lucene не реализована для поиска Azure, и вы можете проголосовать за нее здесь, если хотите: https://feedback.azure.com/forums/263029-azure-search/suggestions/7379515-support-explain-api
Вот мой индекс, который я создал
{
"name": "fieldvalue38gram",
"fields": [
{
"name": "FieldValueID",
"type": "Edm.String",
"facetable": false,
"filterable": false,
"key": true,
"retrievable": true,
"searchable": false,
"sortable": false,
"analyzer": null,
"indexAnalyzer": null,
"searchAnalyzer": null,
"synonymMaps": [],
"fields": []
},
{
"name": "FieldID",
"type": "Edm.Int32",
"facetable": false,
"filterable": true,
"retrievable": true,
"sortable": false,
"analyzer": null,
"indexAnalyzer": null,
"searchAnalyzer": null,
"synonymMaps": [],
"fields": []
},
{
"name": "Text",
"type": "Edm.String",
"facetable": false,
"filterable": true,
"retrievable": true,
"searchable": true,
"sortable": true,
"analyzer": "whitespace",
"indexAnalyzer": null,
"searchAnalyzer": null,
"synonymMaps": [],
"fields": []
},
{
"name": "partialName",
"type": "Edm.String",
"facetable": false,
"filterable": true,
"retrievable": false,
"searchable": true,
"sortable": true,
"analyzer": null,
"indexAnalyzer": "ingram",
"searchAnalyzer": "whitespace",
"synonymMaps": [],
"fields": []
}
],
"suggesters": [],
"scoringProfiles": [
{
"name": "exactFirst",
"text": {
"weights": {
"Text": 2,
"partialName": 1
}
}
}
],
"defaultScoringProfile": "",
"corsOptions": null,
"analyzers": [
{
"@odata.type": "#Microsoft.Azure.Search.CustomAnalyzer",
"name": "ingram",
"tokenizer": "whitespace",
"tokenFilters": [ "lowercase", "NGramTokenFilter" ],
"charFilters": []
}
],
"charFilters": [],
"tokenFilters": [
{
"@odata.type": "#Microsoft.Azure.Search.NGramTokenFilterV2",
"name": "NGramTokenFilter",
"minGram": 3,
"maxGram": 8
}
],
"tokenizers": []
}
Когда я делаю запрос, используя поиск = черный
indexes/fieldvalue38gram/docs?api-version={{version}}&scoringProfile=exactFirst&$top=21&search=black
, я получаю
{
"@search.score": 4.051315,
"FieldValueID": "167402",
"FieldID": 8,
"Text": "BLACKSMITH",
"partialName": "BLACKSMITH"
},
{
"@search.score": 3.9905946,
"FieldValueID": "18594",
"FieldID": 8,
"Text": "BLACK",
"partialName": "BLACK"
},
, что я не ожидал.
Я должен получить повышение за точное совпадение. Кроме того, читая документацию, я вижу, что длина играет роль в оценке, то есть более короткий текст получает более высокий балл во время индексации.
Имея это в виду, я не понимаю, почему второй результат будет оценен ниже, чем первый.
- Кто-нибудь может объяснить оценку в этом сценарии?
- Могу ли я что-нибудь сделать, чтобы помочь понять оценку?
Спасибо
ОБНОВЛЕНИЕ
2019-10-24
Вот пример того, что я боролся со счетом. 1-я и 3-я запись идентичны, кроме идентификатора документа (FieldValueID). Я не могу найти ни рифмы, ни причины для разницы в счете.
{
"value": [
{
"@search.score": 0.10707458,
"FieldValueID": "2",
"FieldID": 2,
"Text": "Another Brown2Black Cow"
},
{
"@search.score": 0.021882897,
"FieldValueID": "4",
"FieldID": 2,
"Text": "Brown"
},
{
"@search.score": 0.017285194,
"FieldValueID": "7",
"FieldID": 2,
"Text": "Another Brown2Black Cow"
}
]
}
2019-10-25
Просто нашел это: https://docs.microsoft.com/en-us/azure/search/search-lucene-query-architecture#scoring-in-a-distributed-index
и это Примечание https://docs.microsoft.com/en-us/azure/search/search-capacity-planning#partition-and-replica-combinations