{"id":603,"date":"2020-02-26T10:28:31","date_gmt":"2020-02-26T10:28:31","guid":{"rendered":"https:\/\/www.aeologic.com\/blog\/?p=603"},"modified":"2020-03-18T08:10:49","modified_gmt":"2020-03-18T08:10:49","slug":"ultimate-solr-guide-11-all-about-indexing-and-basic-data-operations","status":"publish","type":"post","link":"https:\/\/www.aeologic.com\/blog\/ultimate-solr-guide-11-all-about-indexing-and-basic-data-operations\/","title":{"rendered":"All About Indexing and Basic Data Operations &#8211; Part 1- Ultimate Solr Guide"},"content":{"rendered":"<p>Hello Everyone! Today I would like to discuss a very important aspect about Apache Solr. To perform any basic search operation, we need an index. The index of apache solr rests in terms of a document which is basically a set of fields having certain values. Hence, indexing operation in solr becomes very crucial in building an application. Today, we will discuss the process of indexing: adding content to a Solr index and, if necessary, modifying that content or deleting it.<\/p>\n<p>A Solr index can accept data from many different sources, including XML files, comma-separated value (CSV) files, data extracted from tables in a database, and files in common file formats such as Microsoft Word or PDF.<\/p>\n<p>Here are the three most common ways of loading data into a Solr index:<\/p>\n<div class=\"ulist\">\n<ul>\n<li>Using the\u00a0<a href=\"https:\/\/lucene.apache.org\/solr\/guide\/8_1\/uploading-data-with-solr-cell-using-apache-tika.html#uploading-data-with-solr-cell-using-apache-tika\">Solr Cell<\/a>\u00a0framework built on Apache Tika for ingesting binary files or structured files such as Office, Word, PDF, and other proprietary formats.<\/li>\n<li>Uploading XML files by sending HTTP requests to the Solr server from any environment where such requests can be generated.<\/li>\n<li>Writing a custom Java application to ingest data through Solr\u2019s Java Client API (which is described in more detail in\u00a0<a href=\"https:\/\/lucene.apache.org\/solr\/guide\/8_1\/client-apis.html#client-apis\">Client APIs<\/a>). Using the Java API may be the best choice if you\u2019re working with an application, such as a Content Management System (CMS), that offers a Java API.<\/li>\n<\/ul>\n<\/div>\n<p>Regardless of the method used to ingest data, there is a common basic data structure for data being fed into a Solr index: a\u00a0<em>document<\/em>\u00a0containing multiple\u00a0<em>fields,<\/em>\u00a0each with a\u00a0<em>name<\/em>\u00a0and containing\u00a0<em>content,<\/em> which may be empty. One of the fields is usually designated as a unique ID field (analogous to a primary key in a database), although the use of a unique ID field is not strictly required by Solr. If the field name is defined in the Schema that is associated with the index, then the analysis steps associated with that field will be applied to its content when the content is tokenized. Fields that are not explicitly defined in the Schema will either be ignored or mapped to a dynamic field definition (see\u00a0<a href=\"https:\/\/lucene.apache.org\/solr\/guide\/8_1\/documents-fields-and-schema-design.html#documents-fields-and-schema-design\">Documents, Fields, and Schema Design<\/a>) if one matching the field name exists.<\/p>\n<h1><strong>Introduction<\/strong><\/h1>\n<p><strong>Using POST Tool<\/strong><\/p>\n<p>Solr includes a simple command-line tool for POSTing various types of content to a Solr server.<\/p>\n<p>To run it, open a window and enter:<\/p>\n<p><img fetchpriority=\"high\" decoding=\"async\" class=\"alignnone wp-image-605\" src=\"https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-31.png\" alt=\"\" width=\"552\" height=\"214\" srcset=\"https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-31.png 1058w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-31-300x116.png 300w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-31-768x298.png 768w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-31-1024x397.png 1024w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-31-720x279.png 720w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-31-260x101.png 260w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-31-206x80.png 206w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-31-250x97.png 250w\" sizes=\"(max-width: 552px) 100vw, 552px\" \/><\/p>\n<p id=\"preamble\" aria-label=\"Preamble\">This will contact the server at\u00a0<code>localhost:8983<\/code>. Specifying the\u00a0<code>collection\/core name<\/code>\u00a0is\u00a0<strong>mandatory<\/strong>.<\/p>\n<h2><strong>Using the bin\/post tool<\/strong><\/h2>\n<p>The basic usage of\u00a0<code>bin\/post<\/code> is as below:<\/p>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-606\" src=\"https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-32.png\" alt=\"\" width=\"1024\" height=\"799\" srcset=\"https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-32.png 1024w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-32-300x234.png 300w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-32-768x599.png 768w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-32-577x450.png 577w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-32-260x203.png 260w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-32-103x80.png 103w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-32-244x190.png 244w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/p>\n<p><strong>Basic indexing operations<\/strong><\/p>\n<section aria-label=\"Preamble\">\n<h3 id=\"indexing-xml\" class=\"clickable-header\">Indexing XML<\/h3>\n<p>Add all documents with file extension\u00a0<code>.xml<\/code>\u00a0to collection or core named\u00a0<code>test_col<\/code>.<\/p>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-607\" src=\"https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-33.png\" alt=\"\" width=\"378\" height=\"205\" srcset=\"https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-33.png 378w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-33-300x163.png 300w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-33-260x141.png 260w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-33-148x80.png 148w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-33-250x136.png 250w\" sizes=\"(max-width: 378px) 100vw, 378px\" \/><\/p>\n<p>Send XML arguments to delete a document from\u00a0<code>test_col<\/code>.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-608\" src=\"https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-34.png\" alt=\"\" width=\"605\" height=\"205\" srcset=\"https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-34.png 605w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-34-300x102.png 300w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-34-260x88.png 260w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-34-236x80.png 236w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-34-250x85.png 250w\" sizes=\"(max-width: 605px) 100vw, 605px\" \/><\/p>\n<h3 id=\"indexing-csv\" class=\"clickable-header\">Indexing CSV<\/h3>\n<p>Index all CSV files into\u00a0<code>test_col<\/code><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-611\" src=\"https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-35.png\" alt=\"\" width=\"369\" height=\"205\" srcset=\"https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-35.png 369w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-35-300x167.png 300w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-35-260x144.png 260w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-35-144x80.png 144w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-35-250x139.png 250w\" sizes=\"(max-width: 369px) 100vw, 369px\" \/><\/p>\n<p>Index a tab-separated file into\u00a0<code>test_col<\/code>:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-612\" src=\"https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-36.png\" alt=\"\" width=\"740\" height=\"205\" srcset=\"https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-36.png 740w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-36-300x83.png 300w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-36-720x199.png 720w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-36-260x72.png 260w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-36-289x80.png 289w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-36-250x69.png 250w\" sizes=\"(max-width: 740px) 100vw, 740px\" \/><\/p>\n<section class=\"sect2\">The content type (<code>-type<\/code>) parameter is required to treat the file as the proper type, otherwise, it will be ignored and a WARNING logged as it does not know what type of content a .csv file is. The <a href=\"https:\/\/lucene.apache.org\/solr\/guide\/8_1\/uploading-data-with-index-handlers.html#csv-formatted-index-updates\">CSV handler<\/a>\u00a0supports the\u00a0<code>separator<\/code>\u00a0parameter, and is passed through using the\u00a0<code>-params<\/code>\u00a0setting.<\/p>\n<h3 id=\"indexing-json\" class=\"clickable-header\">Indexing JSON<\/h3>\n<p>Index all JSON files into\u00a0<code>test_col<\/code><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-613\" src=\"https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-37.png\" alt=\"\" width=\"378\" height=\"205\" srcset=\"https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-37.png 378w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-37-300x163.png 300w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-37-260x141.png 260w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-37-148x80.png 148w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-37-250x136.png 250w\" sizes=\"(max-width: 378px) 100vw, 378px\" \/><\/p>\n<h3 id=\"indexing-rich-documents-pdf-word-html-etc\" class=\"clickable-header\">Indexing Rich Documents (PDF, Word, HTML, etc.)<\/h3>\n<p>Index a PDF file into\u00a0<code>test_col<\/code><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-614\" src=\"https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-38.png\" alt=\"\" width=\"395\" height=\"205\" srcset=\"https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-38.png 395w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-38-300x156.png 300w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-38-260x135.png 260w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-38-154x80.png 154w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-38-250x130.png 250w\" sizes=\"(max-width: 395px) 100vw, 395px\" \/><\/p>\n<p>Automatically detect content types in a folder, and recursively scan it for documents for indexing into\u00a0<code>test_col<\/code>.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-615\" src=\"https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-39.png\" alt=\"\" width=\"395\" height=\"205\" srcset=\"https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-39.png 395w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-39-300x156.png 300w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-39-260x135.png 260w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-39-154x80.png 154w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-39-250x130.png 250w\" sizes=\"(max-width: 395px) 100vw, 395px\" \/><\/p>\n<p>Automatically detect content types in a folder, but limit it to PPT and HTML files and index into\u00a0<code>test_col<\/code><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-616\" src=\"https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-40.png\" alt=\"\" width=\"563\" height=\"205\" srcset=\"https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-40.png 563w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-40-300x109.png 300w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-40-260x95.png 260w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-40-220x80.png 220w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-40-250x91.png 250w\" sizes=\"(max-width: 563px) 100vw, 563px\" \/><\/p>\n<h3 id=\"indexing-to-a-password-protected-solr-basic-auth\" class=\"clickable-header\">Indexing to a Password Protected Solr (Basic Auth):<\/h3>\n<p>\ufffc<\/p>\n<p>So, this is it for today about indexing operations in solr. More will be covered about the same in the next post.<\/p>\n<p>Index a PDF as the user &#8220;user1&#8221; with password &#8220;password&#8221;:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-617\" src=\"https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-41.png\" alt=\"\" width=\"547\" height=\"205\" srcset=\"https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-41.png 547w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-41-300x112.png 300w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-41-260x97.png 260w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-41-213x80.png 213w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-41-250x94.png 250w\" sizes=\"(max-width: 547px) 100vw, 547px\" \/><\/p>\n<h2 id=\"simpleposttool\" class=\"clickable-header top-level-header\">SimplePostTool<\/h2>\n<p>The\u00a0<code>bin\/post<\/code>\u00a0script currently delegates to a standalone Java program called\u00a0<code>SimplePostTool.<\/code><\/p>\n<p>This tool, bundled into an executable JAR, can be run directly using <code>java -jar test_col\/post.jar<\/code>.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-619\" src=\"https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-42.png\" alt=\"\" width=\"843\" height=\"231\" srcset=\"https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-42.png 2020w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-42-300x82.png 300w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-42-768x211.png 768w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-42-1024x281.png 1024w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-42-720x197.png 720w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-42-1180x324.png 1180w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-42-260x71.png 260w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-42-292x80.png 292w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-42-250x69.png 250w\" sizes=\"(max-width: 843px) 100vw, 843px\" \/><\/p>\n<\/section>\n<\/section>\n<h1>Uploading Data with Index Handlers<\/h1>\n<div class=\"paragraph\">\n<p>Index Handlers are Request Handlers designed to add, delete and update documents to the index. In addition to having plugins for importing rich documents\u00a0<a href=\"https:\/\/lucene.apache.org\/solr\/guide\/7_4\/uploading-data-with-solr-cell-using-apache-tika.html#uploading-data-with-solr-cell-using-apache-tika\">using Tika<\/a>\u00a0or from structured data sources using the\u00a0<a href=\"https:\/\/lucene.apache.org\/solr\/guide\/7_4\/uploading-structured-data-store-data-with-the-data-import-handler.html#uploading-structured-data-store-data-with-the-data-import-handler\">Data Import Handler<\/a>, Solr natively supports indexing structured documents in XML, CSV and JSON.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>The recommended way to configure and use request handlers is with path-based names that map to paths in the request url. However, request handlers can also be specified with the <code>qt<\/code>\u00a0(query type) parameter if the\u00a0<a href=\"https:\/\/lucene.apache.org\/solr\/guide\/7_4\/requestdispatcher-in-solrconfig.html#requestdispatcher-in-solrconfig\"><code>requestDispatcher<\/code><\/a>\u00a0is appropriately configured. It is possible to access the same handler using more than one name, which can be useful if you wish to specify different sets of default options.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>A single unified update request handler supports XML, CSV, JSON, and java bin update requests, delegating to the appropriate <code>ContentStreamLoader<\/code>\u00a0based on the\u00a0<code>Content-Type<\/code>\u00a0of the\u00a0<a href=\"https:\/\/lucene.apache.org\/solr\/guide\/7_4\/content-streams.html#content-streams\">ContentStream<\/a>.<\/p>\n<h2 id=\"updaterequesthandler-configuration\" class=\"clickable-header top-level-header\">UpdateRequestHandler Configuration<\/h2>\n<p>The default configuration file has the update request handler configured by default.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-621\" src=\"https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-43.png\" alt=\"\" width=\"617\" height=\"177\" srcset=\"https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-43.png 1430w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-43-300x86.png 300w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-43-768x220.png 768w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-43-1024x294.png 1024w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-43-720x206.png 720w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-43-1180x338.png 1180w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-43-260x75.png 260w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-43-279x80.png 279w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-43-250x72.png 250w\" sizes=\"(max-width: 617px) 100vw, 617px\" \/><\/p>\n<h3 id=\"adding-documents\" class=\"clickable-header\">Adding Documents<\/h3>\n<p>Adding XML documents<\/p>\n<div class=\"paragraph\">\n<p>The XML schema recognized by the update handler for adding documents is very straightforward:<\/p>\n<\/div>\n<div class=\"ulist\">\n<ul>\n<li>The\u00a0<code>&lt;add&gt;<\/code>\u00a0element introduces one more documents to be added.<\/li>\n<li>The\u00a0<code>&lt;doc&gt;<\/code>\u00a0element introduces the fields making up a document.<\/li>\n<li>The\u00a0<code>&lt;field&gt;<\/code>\u00a0element presents the content for a specific field.<\/li>\n<\/ul>\n<\/div>\n<p>For example:<\/p>\n<\/div>\n<p>&nbsp;<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-623\" src=\"https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-45.png\" alt=\"\" width=\"571\" height=\"385\" srcset=\"https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-45.png 571w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-45-300x202.png 300w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-45-260x175.png 260w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-45-119x80.png 119w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-45-250x169.png 250w\" sizes=\"(max-width: 571px) 100vw, 571px\" \/><\/p>\n<h4 id=\"delete-operations\">Delete Operations<\/h4>\n<p>Documents can be deleted from the index in two ways. &#8220;Delete by ID&#8221; deletes the document with the specified ID, and can be used only if a UniqueID field has been defined in the schema. &#8220;Delete by Query&#8221; deletes all documents matching a specified query, although\u00a0<code>commitWithin<\/code>\u00a0is ignored for a Delete by Query. A single delete message can contain multiple delete operations.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-624\" src=\"https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-46.png\" alt=\"\" width=\"437\" height=\"295\" srcset=\"https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-46.png 437w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-46-300x203.png 300w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-46-260x176.png 260w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-46-119x80.png 119w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-46-250x169.png 250w\" sizes=\"(max-width: 437px) 100vw, 437px\" \/><\/p>\n<h4 id=\"rollback-operations\">Rollback Operations<\/h4>\n<div class=\"sect3\">\n<div class=\"paragraph\">\n<p>The rollback command rolls back all add and deletes made to the index since the last commit. It neither calls any event listeners nor creates a new searcher. Its syntax is simple:\u00a0<code>&lt;rollback\/&gt;<\/code>.<\/p>\n<\/div>\n<\/div>\n<div>\n<h4 id=\"grouping-operations\">Grouping Operations<\/h4>\n<p>You can post several commands in a single XML file by grouping them with the surrounding\u00a0<code>&lt;update&gt;<\/code>\u00a0element.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-625\" src=\"https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-47.png\" alt=\"\" width=\"462\" height=\"385\" srcset=\"https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-47.png 462w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-47-300x250.png 300w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-47-260x217.png 260w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-47-96x80.png 96w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-47-228x190.png 228w\" sizes=\"(max-width: 462px) 100vw, 462px\" \/><\/p>\n<h3 id=\"using-curl-to-perform-updates\" class=\"clickable-header\">Using curl to Perform Updates<\/h3>\n<p>You can use the\u00a0<code>curl<\/code>\u00a0utility to perform any of the above commands, using its\u00a0<code>--data-binary<\/code>\u00a0option to append the XML message to the\u00a0<code>curl<\/code>\u00a0command, and generating a HTTP POST request. For example:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-626\" src=\"https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-48.png\" alt=\"\" width=\"698\" height=\"279\" srcset=\"https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-48.png 917w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-48-300x120.png 300w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-48-768x307.png 768w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-48-720x288.png 720w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-48-260x104.png 260w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-48-200x80.png 200w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-48-250x100.png 250w\" sizes=\"(max-width: 698px) 100vw, 698px\" \/><\/p>\n<p>For posting XML messages contained in a file, you can use the alternative form:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-627\" src=\"https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-49.png\" alt=\"\" width=\"815\" height=\"167\" srcset=\"https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-49.png 1001w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-49-300x61.png 300w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-49-768x157.png 768w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-49-720x147.png 720w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-49-260x53.png 260w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-49-391x80.png 391w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-49-250x51.png 250w\" sizes=\"(max-width: 815px) 100vw, 815px\" \/><\/p>\n<p>Short requests can also be sent using a HTTP GET command, if enabled in\u00a0<a href=\"https:\/\/lucene.apache.org\/solr\/guide\/7_4\/requestdispatcher-in-solrconfig.html#requestparsers-element\">RequestDispatcher in SolrConfig<\/a>\u00a0element, URL-encoding the request, as in the following. Note the escaping of &#8220;&lt;&#8221; and &#8220;&gt;&#8221;:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-628\" src=\"https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-50.png\" alt=\"\" width=\"934\" height=\"205\" srcset=\"https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-50.png 934w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-50-300x66.png 300w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-50-768x169.png 768w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-50-720x158.png 720w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-50-260x57.png 260w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-50-364x80.png 364w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-50-250x55.png 250w\" sizes=\"(max-width: 934px) 100vw, 934px\" \/><\/p>\n<h2 id=\"json-formatted-index-updates\" class=\"clickable-header top-level-header\">JSON Formatted Index Updates<\/h2>\n<div class=\"paragraph\">\n<p>Solr can accept JSON that conforms to a defined structure, or can accept arbitrary JSON-formatted documents. If sending arbitrarily formatted JSON, there are some additional parameters that need to be sent with the update request, described below in the section\u00a0<a href=\"https:\/\/lucene.apache.org\/solr\/guide\/7_4\/transforming-and-indexing-custom-json.html#transforming-and-indexing-custom-json\">Transforming and Indexing Custom JSON<\/a>.<\/p>\n<h3 id=\"solr-style-json\" class=\"clickable-header\">Solr-Style JSON<\/h3>\n<p>JSON formatted update requests may be sent to Solr\u2019s\u00a0<code>\/update<\/code>\u00a0handler using\u00a0<code>Content-Type: application\/json<\/code>\u00a0or\u00a0<code>Content-Type: text\/json<\/code>.<\/p>\n<p>JSON formatted updates can take 3 basic forms, described in-depth below:<\/p>\n<div class=\"ulist\">\n<ul>\n<li><a href=\"https:\/\/lucene.apache.org\/solr\/guide\/7_4\/uploading-data-with-index-handlers.html#adding-a-single-json-document\">A single document to add<\/a>, expressed as a top level JSON Object. To differentiate this from a set of commands, the\u00a0<code>json.command=false<\/code>\u00a0request parameter is required.<\/li>\n<li><a href=\"https:\/\/lucene.apache.org\/solr\/guide\/7_4\/uploading-data-with-index-handlers.html#adding-multiple-json-documents\">A list of documents to add<\/a>, expressed as a top level JSON Array containing a JSON Object per document.<\/li>\n<li><a href=\"https:\/\/lucene.apache.org\/solr\/guide\/7_4\/uploading-data-with-index-handlers.html#sending-json-update-commands\">A sequence of update commands<\/a>, expressed as a top level JSON Object (aka: Map).<\/li>\n<\/ul>\n<\/div>\n<div class=\"sect3\">\n<h4 id=\"adding-a-single-json-document\">Adding a Single JSON Document<\/h4>\n<\/div>\n<div class=\"paragraph\">The simplest way to add Documents via JSON is to send each document individually as a JSON Object, using the\u00a0<code>\/update\/json\/docs<\/code>\u00a0path:<\/div>\n<div><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-629\" src=\"https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-51.png\" alt=\"\" width=\"1024\" height=\"295\" srcset=\"https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-51.png 1024w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-51-300x86.png 300w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-51-768x221.png 768w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-51-720x207.png 720w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-51-260x75.png 260w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-51-278x80.png 278w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-51-250x72.png 250w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/div>\n<\/div>\n<\/div>\n<div>\n<h4 id=\"adding-multiple-json-documents\">Adding Multiple JSON Documents<\/h4>\n<p>Adding multiple documents at one time via JSON can be done via a JSON Array of JSON Objects, where each object represents a document:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-630\" src=\"https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-52.png\" alt=\"\" width=\"686\" height=\"270\" srcset=\"https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-52.png 1024w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-52-300x118.png 300w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-52-768x302.png 768w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-52-720x283.png 720w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-52-260x102.png 260w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-52-203x80.png 203w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-52-250x98.png 250w\" sizes=\"(max-width: 686px) 100vw, 686px\" \/><\/p>\n<p>A sample JSON file is provided at\u00a0<code>test_col\/books.json<\/code>\u00a0and contains an array of objects that you can add to the Solr\u00a0<code>test_col<\/code>\u00a0example:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-631\" src=\"https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-53.png\" alt=\"\" width=\"1024\" height=\"223\" srcset=\"https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-53.png 1024w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-53-300x65.png 300w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-53-768x167.png 768w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-53-720x157.png 720w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-53-260x57.png 260w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-53-367x80.png 367w, https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/carbon-53-250x54.png 250w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/p>\n<p>So, this is it for today about indexing operations in solr. More will be covered about the same in the next post.<\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Hello Everyone! Today I would like to discuss a very important aspect about Apache Solr. To perform any basic search operation, we need an index. The index of apache solr rests in terms of a document which is basically a set of fields having certain values. Hence, indexing operation in solr becomes very crucial in building an application. Today, we will discuss the process of indexing: adding content to a Solr index and, if necessary, modifying that content or deleting it. A Solr index can accept data from many different sources, including XML files, comma-separated value (CSV) files, data extracted from tables in a database, and files in common file formats such as Microsoft Word or PDF. Here are the three most common ways of loading data into a Solr index: Using the\u00a0Solr Cell\u00a0framework built on Apache Tika for ingesting binary files or structured files such as Office, Word, PDF, and other proprietary formats. Uploading XML files by sending HTTP requests to the Solr server from any environment where such requests can be generated. Writing a custom Java application to ingest data through Solr\u2019s Java Client API (which is described in more detail in\u00a0Client APIs). Using the Java API may be the best choice if you\u2019re working with an application, such as a Content Management System (CMS), that offers a Java API. Regardless of the method used to ingest data, there is a common basic data structure for data being fed into a Solr index: a\u00a0document\u00a0containing multiple\u00a0fields,\u00a0each with a\u00a0name\u00a0and containing\u00a0content, which may be empty. One of the fields is usually designated as a unique ID field (analogous to a primary key in a database), although the use of a unique ID field is not strictly required by Solr. If the field name is defined in the Schema that is associated with the index, then the analysis steps associated with that field will be applied to its content when the content is tokenized. Fields that are not explicitly defined in the Schema will either be ignored or mapped to a dynamic field definition (see\u00a0Documents, Fields, and Schema Design) if one matching the field name exists. Introduction Using POST Tool Solr includes a simple command-line tool for POSTing various types of content to a Solr server. To run it, open a window and enter: This will contact the server at\u00a0localhost:8983. Specifying the\u00a0collection\/core name\u00a0is\u00a0mandatory. Using the bin\/post tool The basic usage of\u00a0bin\/post is as below: Basic indexing operations Indexing XML Add all documents with file extension\u00a0.xml\u00a0to collection or core named\u00a0test_col. Send XML arguments to delete a document from\u00a0test_col. Indexing CSV Index all CSV files into\u00a0test_col Index a tab-separated file into\u00a0test_col: The content type (-type) parameter is required to treat the file as the proper type, otherwise, it will be ignored and a WARNING logged as it does not know what type of content a .csv file is. The CSV handler\u00a0supports the\u00a0separator\u00a0parameter, and is passed through using the\u00a0-params\u00a0setting. Indexing JSON Index all JSON files into\u00a0test_col Indexing Rich Documents (PDF, Word, HTML, etc.) Index a PDF file into\u00a0test_col Automatically detect content types in a folder, and recursively scan it for documents for indexing into\u00a0test_col. Automatically detect content types in a folder, but limit it to PPT and HTML files and index into\u00a0test_col Indexing to a Password Protected Solr (Basic Auth): \ufffc So, this is it for today about indexing operations in solr. More will be covered about the same in the next post. Index a PDF as the user &#8220;user1&#8221; with password &#8220;password&#8221;: SimplePostTool The\u00a0bin\/post\u00a0script currently delegates to a standalone Java program called\u00a0SimplePostTool. This tool, bundled into an executable JAR, can be run directly using java -jar test_col\/post.jar. Uploading Data with Index Handlers Index Handlers are Request Handlers designed to add, delete and update documents to the index. In addition to having plugins for importing rich documents\u00a0using Tika\u00a0or from structured data sources using the\u00a0Data Import Handler, Solr natively supports indexing structured documents in XML, CSV and JSON. The recommended way to configure and use request handlers is with path-based names that map to paths in the request url. However, request handlers can also be specified with the qt\u00a0(query type) parameter if the\u00a0requestDispatcher\u00a0is appropriately configured. It is possible to access the same handler using more than one name, which can be useful if you wish to specify different sets of default options. A single unified update request handler supports XML, CSV, JSON, and java bin update requests, delegating to the appropriate ContentStreamLoader\u00a0based on the\u00a0Content-Type\u00a0of the\u00a0ContentStream. UpdateRequestHandler Configuration The default configuration file has the update request handler configured by default. Adding Documents Adding XML documents The XML schema recognized by the update handler for adding documents is very straightforward: The\u00a0&lt;add&gt;\u00a0element introduces one more documents to be added. The\u00a0&lt;doc&gt;\u00a0element introduces the fields making up a document. The\u00a0&lt;field&gt;\u00a0element presents the content for a specific field. For example: &nbsp; Delete Operations Documents can be deleted from the index in two ways. &#8220;Delete by ID&#8221; deletes the document with the specified ID, and can be used only if a UniqueID field has been defined in the schema. &#8220;Delete by Query&#8221; deletes all documents matching a specified query, although\u00a0commitWithin\u00a0is ignored for a Delete by Query. A single delete message can contain multiple delete operations. Rollback Operations The rollback command rolls back all add and deletes made to the index since the last commit. It neither calls any event listeners nor creates a new searcher. Its syntax is simple:\u00a0&lt;rollback\/&gt;. Grouping Operations You can post several commands in a single XML file by grouping them with the surrounding\u00a0&lt;update&gt;\u00a0element. Using curl to Perform Updates You can use the\u00a0curl\u00a0utility to perform any of the above commands, using its\u00a0&#8211;data-binary\u00a0option to append the XML message to the\u00a0curl\u00a0command, and generating a HTTP POST request. For example: For posting XML messages contained in a file, you can use the alternative form: Short requests can also be sent using a HTTP GET command, if enabled in\u00a0RequestDispatcher in SolrConfig\u00a0element, URL-encoding the request, as in the following. Note the escaping of &#8220;&lt;&#8221; and &#8220;&gt;&#8221;: JSON Formatted Index Updates Solr can accept JSON [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":635,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[41],"tags":[14,96,92,93,97,95,7,91,94],"class_list":["post-603","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-solr","tag-apache-solr","tag-handlers","tag-indexing","tag-indexing-in-solr","tag-operations","tag-request-handlers","tag-solr","tag-solr-index","tag-solr-operations"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v23.1 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>All About Indexing and Basic Data Operations - Part 1- Ultimate Solr Guide - Aeologic Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.aeologic.com\/blog\/ultimate-solr-guide-11-all-about-indexing-and-basic-data-operations\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"All About Indexing and Basic Data Operations - Part 1- Ultimate Solr Guide - Aeologic Blog\" \/>\n<meta property=\"og:description\" content=\"Hello Everyone! Today I would like to discuss a very important aspect about Apache Solr. To perform any basic search operation, we need an index. The index of apache solr rests in terms of a document which is basically a set of fields having certain values. Hence, indexing operation in solr becomes very crucial in building an application. Today, we will discuss the process of indexing: adding content to a Solr index and, if necessary, modifying that content or deleting it. A Solr index can accept data from many different sources, including XML files, comma-separated value (CSV) files, data extracted from tables in a database, and files in common file formats such as Microsoft Word or PDF. Here are the three most common ways of loading data into a Solr index: Using the\u00a0Solr Cell\u00a0framework built on Apache Tika for ingesting binary files or structured files such as Office, Word, PDF, and other proprietary formats. Uploading XML files by sending HTTP requests to the Solr server from any environment where such requests can be generated. Writing a custom Java application to ingest data through Solr\u2019s Java Client API (which is described in more detail in\u00a0Client APIs). Using the Java API may be the best choice if you\u2019re working with an application, such as a Content Management System (CMS), that offers a Java API. Regardless of the method used to ingest data, there is a common basic data structure for data being fed into a Solr index: a\u00a0document\u00a0containing multiple\u00a0fields,\u00a0each with a\u00a0name\u00a0and containing\u00a0content, which may be empty. One of the fields is usually designated as a unique ID field (analogous to a primary key in a database), although the use of a unique ID field is not strictly required by Solr. If the field name is defined in the Schema that is associated with the index, then the analysis steps associated with that field will be applied to its content when the content is tokenized. Fields that are not explicitly defined in the Schema will either be ignored or mapped to a dynamic field definition (see\u00a0Documents, Fields, and Schema Design) if one matching the field name exists. Introduction Using POST Tool Solr includes a simple command-line tool for POSTing various types of content to a Solr server. To run it, open a window and enter: This will contact the server at\u00a0localhost:8983. Specifying the\u00a0collection\/core name\u00a0is\u00a0mandatory. Using the bin\/post tool The basic usage of\u00a0bin\/post is as below: Basic indexing operations Indexing XML Add all documents with file extension\u00a0.xml\u00a0to collection or core named\u00a0test_col. Send XML arguments to delete a document from\u00a0test_col. Indexing CSV Index all CSV files into\u00a0test_col Index a tab-separated file into\u00a0test_col: The content type (-type) parameter is required to treat the file as the proper type, otherwise, it will be ignored and a WARNING logged as it does not know what type of content a .csv file is. The CSV handler\u00a0supports the\u00a0separator\u00a0parameter, and is passed through using the\u00a0-params\u00a0setting. Indexing JSON Index all JSON files into\u00a0test_col Indexing Rich Documents (PDF, Word, HTML, etc.) Index a PDF file into\u00a0test_col Automatically detect content types in a folder, and recursively scan it for documents for indexing into\u00a0test_col. Automatically detect content types in a folder, but limit it to PPT and HTML files and index into\u00a0test_col Indexing to a Password Protected Solr (Basic Auth): \ufffc So, this is it for today about indexing operations in solr. More will be covered about the same in the next post. Index a PDF as the user &#8220;user1&#8221; with password &#8220;password&#8221;: SimplePostTool The\u00a0bin\/post\u00a0script currently delegates to a standalone Java program called\u00a0SimplePostTool. This tool, bundled into an executable JAR, can be run directly using java -jar test_col\/post.jar. Uploading Data with Index Handlers Index Handlers are Request Handlers designed to add, delete and update documents to the index. In addition to having plugins for importing rich documents\u00a0using Tika\u00a0or from structured data sources using the\u00a0Data Import Handler, Solr natively supports indexing structured documents in XML, CSV and JSON. The recommended way to configure and use request handlers is with path-based names that map to paths in the request url. However, request handlers can also be specified with the qt\u00a0(query type) parameter if the\u00a0requestDispatcher\u00a0is appropriately configured. It is possible to access the same handler using more than one name, which can be useful if you wish to specify different sets of default options. A single unified update request handler supports XML, CSV, JSON, and java bin update requests, delegating to the appropriate ContentStreamLoader\u00a0based on the\u00a0Content-Type\u00a0of the\u00a0ContentStream. UpdateRequestHandler Configuration The default configuration file has the update request handler configured by default. Adding Documents Adding XML documents The XML schema recognized by the update handler for adding documents is very straightforward: The\u00a0&lt;add&gt;\u00a0element introduces one more documents to be added. The\u00a0&lt;doc&gt;\u00a0element introduces the fields making up a document. The\u00a0&lt;field&gt;\u00a0element presents the content for a specific field. For example: &nbsp; Delete Operations Documents can be deleted from the index in two ways. &#8220;Delete by ID&#8221; deletes the document with the specified ID, and can be used only if a UniqueID field has been defined in the schema. &#8220;Delete by Query&#8221; deletes all documents matching a specified query, although\u00a0commitWithin\u00a0is ignored for a Delete by Query. A single delete message can contain multiple delete operations. Rollback Operations The rollback command rolls back all add and deletes made to the index since the last commit. It neither calls any event listeners nor creates a new searcher. Its syntax is simple:\u00a0&lt;rollback\/&gt;. Grouping Operations You can post several commands in a single XML file by grouping them with the surrounding\u00a0&lt;update&gt;\u00a0element. Using curl to Perform Updates You can use the\u00a0curl\u00a0utility to perform any of the above commands, using its\u00a0--data-binary\u00a0option to append the XML message to the\u00a0curl\u00a0command, and generating a HTTP POST request. For example: For posting XML messages contained in a file, you can use the alternative form: Short requests can also be sent using a HTTP GET command, if enabled in\u00a0RequestDispatcher in SolrConfig\u00a0element, URL-encoding the request, as in the following. Note the escaping of &#8220;&lt;&#8221; and &#8220;&gt;&#8221;: JSON Formatted Index Updates Solr can accept JSON [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.aeologic.com\/blog\/ultimate-solr-guide-11-all-about-indexing-and-basic-data-operations\/\" \/>\n<meta property=\"og:site_name\" content=\"Aeologic Blog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/AeoLogicTech\/\" \/>\n<meta property=\"article:published_time\" content=\"2020-02-26T10:28:31+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2020-03-18T08:10:49+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/Indexing-and-Basic-Data-Operations.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1080\" \/>\n\t<meta property=\"og:image:height\" content=\"622\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Manoj Kumar\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@aeologictech\" \/>\n<meta name=\"twitter:site\" content=\"@aeologictech\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Manoj Kumar\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":[\"Article\",\"BlogPosting\"],\"@id\":\"https:\/\/www.aeologic.com\/blog\/ultimate-solr-guide-11-all-about-indexing-and-basic-data-operations\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.aeologic.com\/blog\/ultimate-solr-guide-11-all-about-indexing-and-basic-data-operations\/\"},\"author\":{\"name\":\"Manoj Kumar\",\"@id\":\"https:\/\/www.aeologic.com\/blog\/#\/schema\/person\/13549984ba8e5f441cc733ed20d7daa4\"},\"headline\":\"All About Indexing and Basic Data Operations &#8211; Part 1- Ultimate Solr Guide\",\"datePublished\":\"2020-02-26T10:28:31+00:00\",\"dateModified\":\"2020-03-18T08:10:49+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.aeologic.com\/blog\/ultimate-solr-guide-11-all-about-indexing-and-basic-data-operations\/\"},\"wordCount\":1264,\"publisher\":{\"@id\":\"https:\/\/www.aeologic.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.aeologic.com\/blog\/ultimate-solr-guide-11-all-about-indexing-and-basic-data-operations\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/Indexing-and-Basic-Data-Operations.png\",\"keywords\":[\"apache solr\",\"handlers\",\"indexing\",\"indexing in solr\",\"operations\",\"request handlers\",\"solr\",\"solr index\",\"solr operations\"],\"articleSection\":[\"Solr\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.aeologic.com\/blog\/ultimate-solr-guide-11-all-about-indexing-and-basic-data-operations\/\",\"url\":\"https:\/\/www.aeologic.com\/blog\/ultimate-solr-guide-11-all-about-indexing-and-basic-data-operations\/\",\"name\":\"All About Indexing and Basic Data Operations - Part 1- Ultimate Solr Guide - Aeologic Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.aeologic.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.aeologic.com\/blog\/ultimate-solr-guide-11-all-about-indexing-and-basic-data-operations\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.aeologic.com\/blog\/ultimate-solr-guide-11-all-about-indexing-and-basic-data-operations\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/Indexing-and-Basic-Data-Operations.png\",\"datePublished\":\"2020-02-26T10:28:31+00:00\",\"dateModified\":\"2020-03-18T08:10:49+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.aeologic.com\/blog\/ultimate-solr-guide-11-all-about-indexing-and-basic-data-operations\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.aeologic.com\/blog\/ultimate-solr-guide-11-all-about-indexing-and-basic-data-operations\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.aeologic.com\/blog\/ultimate-solr-guide-11-all-about-indexing-and-basic-data-operations\/#primaryimage\",\"url\":\"https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/Indexing-and-Basic-Data-Operations.png\",\"contentUrl\":\"https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/Indexing-and-Basic-Data-Operations.png\",\"width\":1080,\"height\":622},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.aeologic.com\/blog\/ultimate-solr-guide-11-all-about-indexing-and-basic-data-operations\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.aeologic.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"All About Indexing and Basic Data Operations &#8211; Part 1- Ultimate Solr Guide\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.aeologic.com\/blog\/#website\",\"url\":\"https:\/\/www.aeologic.com\/blog\/\",\"name\":\"Aeologic Blog\",\"description\":\"Aeologic\",\"publisher\":{\"@id\":\"https:\/\/www.aeologic.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.aeologic.com\/blog\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.aeologic.com\/blog\/#organization\",\"name\":\"AeoLogic Technologies\",\"url\":\"https:\/\/www.aeologic.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.aeologic.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2022\/05\/new-logo-aeo.jpg\",\"contentUrl\":\"https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2022\/05\/new-logo-aeo.jpg\",\"width\":385,\"height\":162,\"caption\":\"AeoLogic Technologies\"},\"image\":{\"@id\":\"https:\/\/www.aeologic.com\/blog\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/AeoLogicTech\/\",\"https:\/\/x.com\/aeologictech\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.aeologic.com\/blog\/#\/schema\/person\/13549984ba8e5f441cc733ed20d7daa4\",\"name\":\"Manoj Kumar\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.aeologic.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/24ce77602da5eb5715d74a95733f6c7548e2af73f5a493f9bc0bf55f611d025e?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/24ce77602da5eb5715d74a95733f6c7548e2af73f5a493f9bc0bf55f611d025e?s=96&d=mm&r=g\",\"caption\":\"Manoj Kumar\"},\"description\":\"Manoj Kumar is a seasoned Digital Marketing Manager and passionate Tech Blogger with deep expertise in SEO, AI trends, and emerging digital technologies. He writes about innovative solutions that drive growth and transformation across industry. Featured on - YOURSTORY | TECHSLING | ELEARNINGINDUSTRY | DATASCIENCECENTRAL | TIMESOFINDIA | MEDIUM | DATAFLOQ\",\"sameAs\":[\"https:\/\/www.aeologic.com\/\",\"https:\/\/www.linkedin.com\/in\/manoj-kumar-rajput\/\"],\"url\":\"https:\/\/www.aeologic.com\/blog\/author\/manoj\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"All About Indexing and Basic Data Operations - Part 1- Ultimate Solr Guide - Aeologic Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.aeologic.com\/blog\/ultimate-solr-guide-11-all-about-indexing-and-basic-data-operations\/","og_locale":"en_US","og_type":"article","og_title":"All About Indexing and Basic Data Operations - Part 1- Ultimate Solr Guide - Aeologic Blog","og_description":"Hello Everyone! Today I would like to discuss a very important aspect about Apache Solr. To perform any basic search operation, we need an index. The index of apache solr rests in terms of a document which is basically a set of fields having certain values. Hence, indexing operation in solr becomes very crucial in building an application. Today, we will discuss the process of indexing: adding content to a Solr index and, if necessary, modifying that content or deleting it. A Solr index can accept data from many different sources, including XML files, comma-separated value (CSV) files, data extracted from tables in a database, and files in common file formats such as Microsoft Word or PDF. Here are the three most common ways of loading data into a Solr index: Using the\u00a0Solr Cell\u00a0framework built on Apache Tika for ingesting binary files or structured files such as Office, Word, PDF, and other proprietary formats. Uploading XML files by sending HTTP requests to the Solr server from any environment where such requests can be generated. Writing a custom Java application to ingest data through Solr\u2019s Java Client API (which is described in more detail in\u00a0Client APIs). Using the Java API may be the best choice if you\u2019re working with an application, such as a Content Management System (CMS), that offers a Java API. Regardless of the method used to ingest data, there is a common basic data structure for data being fed into a Solr index: a\u00a0document\u00a0containing multiple\u00a0fields,\u00a0each with a\u00a0name\u00a0and containing\u00a0content, which may be empty. One of the fields is usually designated as a unique ID field (analogous to a primary key in a database), although the use of a unique ID field is not strictly required by Solr. If the field name is defined in the Schema that is associated with the index, then the analysis steps associated with that field will be applied to its content when the content is tokenized. Fields that are not explicitly defined in the Schema will either be ignored or mapped to a dynamic field definition (see\u00a0Documents, Fields, and Schema Design) if one matching the field name exists. Introduction Using POST Tool Solr includes a simple command-line tool for POSTing various types of content to a Solr server. To run it, open a window and enter: This will contact the server at\u00a0localhost:8983. Specifying the\u00a0collection\/core name\u00a0is\u00a0mandatory. Using the bin\/post tool The basic usage of\u00a0bin\/post is as below: Basic indexing operations Indexing XML Add all documents with file extension\u00a0.xml\u00a0to collection or core named\u00a0test_col. Send XML arguments to delete a document from\u00a0test_col. Indexing CSV Index all CSV files into\u00a0test_col Index a tab-separated file into\u00a0test_col: The content type (-type) parameter is required to treat the file as the proper type, otherwise, it will be ignored and a WARNING logged as it does not know what type of content a .csv file is. The CSV handler\u00a0supports the\u00a0separator\u00a0parameter, and is passed through using the\u00a0-params\u00a0setting. Indexing JSON Index all JSON files into\u00a0test_col Indexing Rich Documents (PDF, Word, HTML, etc.) Index a PDF file into\u00a0test_col Automatically detect content types in a folder, and recursively scan it for documents for indexing into\u00a0test_col. Automatically detect content types in a folder, but limit it to PPT and HTML files and index into\u00a0test_col Indexing to a Password Protected Solr (Basic Auth): \ufffc So, this is it for today about indexing operations in solr. More will be covered about the same in the next post. Index a PDF as the user &#8220;user1&#8221; with password &#8220;password&#8221;: SimplePostTool The\u00a0bin\/post\u00a0script currently delegates to a standalone Java program called\u00a0SimplePostTool. This tool, bundled into an executable JAR, can be run directly using java -jar test_col\/post.jar. Uploading Data with Index Handlers Index Handlers are Request Handlers designed to add, delete and update documents to the index. In addition to having plugins for importing rich documents\u00a0using Tika\u00a0or from structured data sources using the\u00a0Data Import Handler, Solr natively supports indexing structured documents in XML, CSV and JSON. The recommended way to configure and use request handlers is with path-based names that map to paths in the request url. However, request handlers can also be specified with the qt\u00a0(query type) parameter if the\u00a0requestDispatcher\u00a0is appropriately configured. It is possible to access the same handler using more than one name, which can be useful if you wish to specify different sets of default options. A single unified update request handler supports XML, CSV, JSON, and java bin update requests, delegating to the appropriate ContentStreamLoader\u00a0based on the\u00a0Content-Type\u00a0of the\u00a0ContentStream. UpdateRequestHandler Configuration The default configuration file has the update request handler configured by default. Adding Documents Adding XML documents The XML schema recognized by the update handler for adding documents is very straightforward: The\u00a0&lt;add&gt;\u00a0element introduces one more documents to be added. The\u00a0&lt;doc&gt;\u00a0element introduces the fields making up a document. The\u00a0&lt;field&gt;\u00a0element presents the content for a specific field. For example: &nbsp; Delete Operations Documents can be deleted from the index in two ways. &#8220;Delete by ID&#8221; deletes the document with the specified ID, and can be used only if a UniqueID field has been defined in the schema. &#8220;Delete by Query&#8221; deletes all documents matching a specified query, although\u00a0commitWithin\u00a0is ignored for a Delete by Query. A single delete message can contain multiple delete operations. Rollback Operations The rollback command rolls back all add and deletes made to the index since the last commit. It neither calls any event listeners nor creates a new searcher. Its syntax is simple:\u00a0&lt;rollback\/&gt;. Grouping Operations You can post several commands in a single XML file by grouping them with the surrounding\u00a0&lt;update&gt;\u00a0element. Using curl to Perform Updates You can use the\u00a0curl\u00a0utility to perform any of the above commands, using its\u00a0--data-binary\u00a0option to append the XML message to the\u00a0curl\u00a0command, and generating a HTTP POST request. For example: For posting XML messages contained in a file, you can use the alternative form: Short requests can also be sent using a HTTP GET command, if enabled in\u00a0RequestDispatcher in SolrConfig\u00a0element, URL-encoding the request, as in the following. Note the escaping of &#8220;&lt;&#8221; and &#8220;&gt;&#8221;: JSON Formatted Index Updates Solr can accept JSON [&hellip;]","og_url":"https:\/\/www.aeologic.com\/blog\/ultimate-solr-guide-11-all-about-indexing-and-basic-data-operations\/","og_site_name":"Aeologic Blog","article_publisher":"https:\/\/www.facebook.com\/AeoLogicTech\/","article_published_time":"2020-02-26T10:28:31+00:00","article_modified_time":"2020-03-18T08:10:49+00:00","og_image":[{"width":1080,"height":622,"url":"https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/Indexing-and-Basic-Data-Operations.png","type":"image\/png"}],"author":"Manoj Kumar","twitter_card":"summary_large_image","twitter_creator":"@aeologictech","twitter_site":"@aeologictech","twitter_misc":{"Written by":"Manoj Kumar","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":["Article","BlogPosting"],"@id":"https:\/\/www.aeologic.com\/blog\/ultimate-solr-guide-11-all-about-indexing-and-basic-data-operations\/#article","isPartOf":{"@id":"https:\/\/www.aeologic.com\/blog\/ultimate-solr-guide-11-all-about-indexing-and-basic-data-operations\/"},"author":{"name":"Manoj Kumar","@id":"https:\/\/www.aeologic.com\/blog\/#\/schema\/person\/13549984ba8e5f441cc733ed20d7daa4"},"headline":"All About Indexing and Basic Data Operations &#8211; Part 1- Ultimate Solr Guide","datePublished":"2020-02-26T10:28:31+00:00","dateModified":"2020-03-18T08:10:49+00:00","mainEntityOfPage":{"@id":"https:\/\/www.aeologic.com\/blog\/ultimate-solr-guide-11-all-about-indexing-and-basic-data-operations\/"},"wordCount":1264,"publisher":{"@id":"https:\/\/www.aeologic.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.aeologic.com\/blog\/ultimate-solr-guide-11-all-about-indexing-and-basic-data-operations\/#primaryimage"},"thumbnailUrl":"https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/Indexing-and-Basic-Data-Operations.png","keywords":["apache solr","handlers","indexing","indexing in solr","operations","request handlers","solr","solr index","solr operations"],"articleSection":["Solr"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.aeologic.com\/blog\/ultimate-solr-guide-11-all-about-indexing-and-basic-data-operations\/","url":"https:\/\/www.aeologic.com\/blog\/ultimate-solr-guide-11-all-about-indexing-and-basic-data-operations\/","name":"All About Indexing and Basic Data Operations - Part 1- Ultimate Solr Guide - Aeologic Blog","isPartOf":{"@id":"https:\/\/www.aeologic.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.aeologic.com\/blog\/ultimate-solr-guide-11-all-about-indexing-and-basic-data-operations\/#primaryimage"},"image":{"@id":"https:\/\/www.aeologic.com\/blog\/ultimate-solr-guide-11-all-about-indexing-and-basic-data-operations\/#primaryimage"},"thumbnailUrl":"https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/Indexing-and-Basic-Data-Operations.png","datePublished":"2020-02-26T10:28:31+00:00","dateModified":"2020-03-18T08:10:49+00:00","breadcrumb":{"@id":"https:\/\/www.aeologic.com\/blog\/ultimate-solr-guide-11-all-about-indexing-and-basic-data-operations\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.aeologic.com\/blog\/ultimate-solr-guide-11-all-about-indexing-and-basic-data-operations\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.aeologic.com\/blog\/ultimate-solr-guide-11-all-about-indexing-and-basic-data-operations\/#primaryimage","url":"https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/Indexing-and-Basic-Data-Operations.png","contentUrl":"https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2020\/02\/Indexing-and-Basic-Data-Operations.png","width":1080,"height":622},{"@type":"BreadcrumbList","@id":"https:\/\/www.aeologic.com\/blog\/ultimate-solr-guide-11-all-about-indexing-and-basic-data-operations\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.aeologic.com\/blog\/"},{"@type":"ListItem","position":2,"name":"All About Indexing and Basic Data Operations &#8211; Part 1- Ultimate Solr Guide"}]},{"@type":"WebSite","@id":"https:\/\/www.aeologic.com\/blog\/#website","url":"https:\/\/www.aeologic.com\/blog\/","name":"Aeologic Blog","description":"Aeologic","publisher":{"@id":"https:\/\/www.aeologic.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.aeologic.com\/blog\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.aeologic.com\/blog\/#organization","name":"AeoLogic Technologies","url":"https:\/\/www.aeologic.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.aeologic.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2022\/05\/new-logo-aeo.jpg","contentUrl":"https:\/\/www.aeologic.com\/blog\/wp-content\/uploads\/2022\/05\/new-logo-aeo.jpg","width":385,"height":162,"caption":"AeoLogic Technologies"},"image":{"@id":"https:\/\/www.aeologic.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/AeoLogicTech\/","https:\/\/x.com\/aeologictech"]},{"@type":"Person","@id":"https:\/\/www.aeologic.com\/blog\/#\/schema\/person\/13549984ba8e5f441cc733ed20d7daa4","name":"Manoj Kumar","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.aeologic.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/24ce77602da5eb5715d74a95733f6c7548e2af73f5a493f9bc0bf55f611d025e?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/24ce77602da5eb5715d74a95733f6c7548e2af73f5a493f9bc0bf55f611d025e?s=96&d=mm&r=g","caption":"Manoj Kumar"},"description":"Manoj Kumar is a seasoned Digital Marketing Manager and passionate Tech Blogger with deep expertise in SEO, AI trends, and emerging digital technologies. He writes about innovative solutions that drive growth and transformation across industry. Featured on - YOURSTORY | TECHSLING | ELEARNINGINDUSTRY | DATASCIENCECENTRAL | TIMESOFINDIA | MEDIUM | DATAFLOQ","sameAs":["https:\/\/www.aeologic.com\/","https:\/\/www.linkedin.com\/in\/manoj-kumar-rajput\/"],"url":"https:\/\/www.aeologic.com\/blog\/author\/manoj\/"}]}},"_links":{"self":[{"href":"https:\/\/www.aeologic.com\/blog\/wp-json\/wp\/v2\/posts\/603","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.aeologic.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.aeologic.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.aeologic.com\/blog\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/www.aeologic.com\/blog\/wp-json\/wp\/v2\/comments?post=603"}],"version-history":[{"count":0,"href":"https:\/\/www.aeologic.com\/blog\/wp-json\/wp\/v2\/posts\/603\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.aeologic.com\/blog\/wp-json\/wp\/v2\/media\/635"}],"wp:attachment":[{"href":"https:\/\/www.aeologic.com\/blog\/wp-json\/wp\/v2\/media?parent=603"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.aeologic.com\/blog\/wp-json\/wp\/v2\/categories?post=603"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.aeologic.com\/blog\/wp-json\/wp\/v2\/tags?post=603"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}