Elasti c поиск отдает приоритет запускам с совпадения - PullRequest
1 голос
/ 28 марта 2020

Я использую версиюasticsearch 6.8 для индексации документов, и у меня есть это требование при поиске. Я создал индекс со следующими настройками.

{
  "settings": {
"number_of_shards": 3,
"number_of_replicas": 2,
"analysis": {
  "analyzer": {
    "default": {
      "type": "custom",
      "tokenizer": "icu_tokenizer"
    }
  }
}
  },
      "mappings": {
"person": {
  "properties": {
    "firstName": {
      "type": "text"
    },
    "lastName": {
      "type": "text"
    },
    "technologies": {
      "type": "nested"
    }
  }
}
  }
}

Например, я создаю 3 документа с использованием следующих технологий.

  • 1-й документ - "технологии": ["my технология испытаний "]
  • 2-й документ -" технологии ": [" технологии испытаний "]
  • 3-й документ" технологии ": [" технические испытания "]

Поэтому при поиске по ключевому слову «test» возвращаются все документы, это правильное поведение, но я хочу, чтобы второй документ получил приоритет, поскольку он начинается с test *. Поэтому мое требование состоит в том, чтобы начать со значениями приоритета, как показано ниже.

Результаты поиска должны быть:

  • 1-й результат - 2-й документ - "технологии": ["технология тестирования"] Другие могут быть в любом порядке
  • 1-й документ - "технологии": ["моя технология тестирования"]
  • 3-й документ "технологии": ["технический тест"]

Вот мой java код для поиска. Я использую библиотекуasticsearch-rest-high-level-client.

SearchRequest searchRequest = new SearchRequest ("profile1"); SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder ();

    QueryBuilder queryBuilder = QueryBuilders
            .boolQuery()
            .must(QueryBuilders
                    .matchQuery("technologies.name", technology));

    searchSourceBuilder.query(QueryBuilders
            .nestedQuery("technologies",
                    queryBuilder,
                    ScoreMode.Avg));

    searchRequest.source(searchSourceBuilder);

    SearchResponse response =
            client.search(searchRequest, RequestOptions.DEFAULT);

Что-то мне не хватает при поиске документов? Пожалуйста помоги мне с этим. Спасибо.

1 Ответ

0 голосов
/ 29 марта 2020

Мне удалось найти более полезные ответы по следующим ссылкам.

https://www.elastic.co/blog/starts-with-phrase-matching

https://gist.github.com/polyfractal/4704772

...