Понимание результатов оценки - точные оценки ниже, чем частичные - PullRequest
1 голос
/ 23 октября 2019

Я понимаю, что функция объяснения 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

1 Ответ

0 голосов
/ 23 октября 2019

Полагаю, это потому, что вы заставляете поле TEXT использовать анализатор пробелов, а не анализатор по умолчанию. Я не верю, что анализатор пробелов снизит ваши термины. Поскольку ваш поисковый запрос и поле TEXT содержат разные регистры, я не уверен, что они будут совпадать. Вы можете попробовать это, попробовав поиск в другом регистре и посмотреть, что возвращается (то же самое для поискового анализатора, я бы рекомендовал не использовать там также анализатор пробелов).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...