Возвращать только поля соответствия вместо возврата всего документа

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

Предположим, у меня есть данные в этом формате,

POST /bookdb_index/book/_bulk
{ "index": { "_id": 1 }}
{ "title": "Elasticsearch: The Definitive Guide", "authors": ["clinton gormley", "zachary tong"], "summary" : "A distibuted real-time search and analytics engine", "publish_date" : "2015-02-07", "num_reviews": 20, "publisher": "oreilly" }
{ "index": { "_id": 2 }}
{ "title": "Taming Text: How to Find, Organize, and Manipulate It", "authors": ["grant ingersoll", "thomas morton", "drew farris"], "summary" : "organize text using approaches such as full-text search, proper name recognition, clustering, tagging, information extraction, and summarization", "publish_date" : "2013-01-24", "num_reviews": 12, "publisher": "manning" }
{ "index": { "_id": 3 }}
{ "title": "Elasticsearch in Action", "authors": ["radu gheorge", "matthew lee hinman", "roy russo"], "summary" : "build scalable search applications using Elasticsearch without having to do complex low-level programming or understand advanced data science algorithms", "publish_date" : "2015-12-03", "num_reviews": 18, "publisher": "manning" }
{ "index": { "_id": 4 }}
{ "title": "Solr in Action", "authors": ["trey grainger", "timothy potter"], "summary" : "Comprehensive guide to implementing a scalable search engine using Apache Solr", "publish_date" : "2014-04-05", "num_reviews": 23, "publisher": "manning" }

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

GET /bookdb_index/book/_search?q=guide

когда я запускаю это, он возвращает мне весь документ. Однако я хочу вернуть только те поля, которые содержат руководство, например, в id 4 в сводном руководстве, так что возвращается только сводное поле, а в id 1 в заголовке есть, поэтому возвращается только заголовок


comment
Могу ли я также узнать количество искомого текста в документе. Я имею в виду, если я ищу quide, могу ли я подсчитать, сколько раз quide встречается в каждом документе и в каком поле.   -  person mansi    schedule 18.07.2019
comment
Я добавил для вас ответ: если вы хотите подсчитать, сколько раз строка guide встречается в каждом документе, вы можете подсчитать количество вхождений <em>guide</em>, с которыми совпадает строка. Надеюсь поможет, удачи   -  person Always Sunny    schedule 19.07.2019


Ответы (1)


Обычно мы используем фильтрацию _source, чтобы указать, какое поле нам нужно после поиска, но это не означает, что все поле _source соответствует строке моего запроса. Но поскольку вам нужно только поле, соответствующее вашему поисковому запросу, в этом случае вы можете использовать выделить функцию Elasticsearh вместе с multi_match таким образом,

GET /bookdb_index/book/_search
{
    "query": {
        "multi_match": {
            "query": "guide",
            "fields": ["title", "summary"]
        }
    },
    "highlight": {
        "fields": {
            "title": {},
            "summary": {}
        }
    },
    "size": 10
}

Когда я запускаю это в своем индексе elasticsearch, это то, что я получаю в качестве ответа. Если вы внимательно посмотрите на поле highlight, оно покажет, какое поле соответствует вашей строке запроса, т.е. guide в этом случае, а также подчеркните это тегом и <em>Guide</em>. Для первого документа он соответствует полю summery, а для второго — полю title.

{
  "took": 84,
  "timed_out": false,
  "_shards": {
    "total": 1,
    "successful": 1,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": 2,
    "max_score": 1.3278645,
    "hits": [
      {
        "_index": "bookdb_index",
        "_type": "book",
        "_id": "4",
        "_score": 1.3278645,
        "_source": {
          "title": "Solr in Action",
          "authors": [
            "trey grainger",
            "timothy potter"
          ],
          "summary": "Comprehensive guide to implementing a scalable search engine using Apache Solr",
          "publish_date": "2014-04-05",
          "num_reviews": 23,
          "publisher": "manning"
        },
        "highlight": {
          "summary": [
            "Comprehensive <em>guide</em> to implementing a scalable search engine using Apache Solr"
          ]
        }
      },
      {
        "_index": "bookdb_index",
        "_type": "book",
        "_id": "1",
        "_score": 1.2871116,
        "_source": {
          "title": "Elasticsearch: The Definitive Guide",
          "authors": [
            "clinton gormley",
            "zachary tong"
          ],
          "summary": "A distibuted real-time search and analytics engine",
          "publish_date": "2015-02-07",
          "num_reviews": 20,
          "publisher": "oreilly"
        },
        "highlight": {
          "title": [
            "Elasticsearch: The Definitive <em>Guide</em>"
          ]
        }
      }
    ]
  }
}
person Always Sunny    schedule 18.07.2019