Page tree
Skip to end of metadata
Go to start of metadata

Quick Start

The following exercise builds on the Attivio Quick Start tutorial to introduce the concept of workflows and custom ingest transformers. We'll deploy the Factbook project and then edit an ingestion workflow into which we'll insert a custom transformer which will do something odd but fun: we'll make some of our content searchable in Pig Latin. We'll do this by stacking additional tokens.

Prerequisites

In order to complete the following exercise, you'll need to have the following software installed:

ApplicationRecommended VersionDownload LocationNotes
Maven3.5 or laterhttps://maven.apache.org/ 
EclipseOxygen or laterhttps://www.eclipse.org/Be sure to install the M2Eclipse plugin or use the Eclipse IDE for Java Developers installer which includes Maven integration.

 

Sidebar on Tokens

Since we'll be inserting a custom transformer that will be stacking tokens in Pig Latin, we should first have a basic understanding of how tokens work.

Introduction

In order to support free text search, fields in an Attivio index are tokenized by default in the ingest workflow if they are indexed and are a string field. This means that the field's text value is split into "tokens", which are typically words. Each token and its position in the document is indexed on its own and can be searched individually or as part of a more complex query.

The Anatomy of a Token

Let's say a document we ingested contains the phrase "the lazy dog". Examining the generated tokens, we have:

['the'@800001#35~38] ['lazy'@1000#39~43] ['dog'@2800#44~47]

The token output is constructed as follows:

  • Each separate token is grouped within square brackets. [ ... ]
  • The token value is written between single quotes. 'the'
  • Token annotation information appears after the @ character. It is output as a long (in hex format). @800001
  • Token startOffset is output after the # character. This is a character count from the start of the field and is zero-based (a token starting at the beginning of a field would have a startOffset of 0). #35
  • Token endOffset is output after the ~ character. This is the index of the character immediately following the end of the token text, such that token endOffset - startOffset = token length. ~38

Token Stacking

Stacking is a concept whereby tokens can be added to the TokenList overlaid on top of an existing token. A token found in the text is referred to as a surface token. Token stacking is used by certain linguistic operations to generate additional tokens to improve recall or provide additional query functionality.

Operations that produce stacked tokens include:

  • Lemmatization – additional tokens are generated for lemmas and stacked at the surface token position.
  • Entity Extraction – additional tokens are stacked denoting the type of located entity, e.g. person, and the start and end position of the entity.
  • SoundsLike – additional tokens are produced by the Sounds Like operation and are stacked at the surface token position.

If we take the example "the quick brown fox jumped over the lazy dog", the lemmatization tokens added for the word jumped are stacked underneath the surface token and inherit the same start and end offset values. In addition, these stacked lemma tokens are annotated with the TokenAnnotation.LEMMA annotation flag @8.

0         10        20        30        40        50
|         |         |         |         |         |
012345678901234567890123456789012345678901234567890
|         |         |         |         |         |
the    quick brown fox jumped over the lazy dog
 
Tokens:
the    quick brown fox jumped over the lazy dog
                       jump
                       jumps
Raw Tokens:
['the'@800001#0~3] ['quick'#7~12] ['brown'#13~18] ['fox'#19~22] ['jumped'#23~29, 'jump'@8#23~29, 'jump'@8#23~29, 'jumps'@8#23~29] ['over'#30~34] ['the'@800001#35~38] ['lazy'#39~43] ['dog'#44~47]

Now that we know what tokens are, we need to have a way to examine them during ingestion.

1. Deploy the Attivio Factbook Project

Open the Attivio Quick Start Tutorial in a new tab in your browser, follow the instructions to deploy the Factbook project, and return to this page when complete.

2. Create a LogDocument component and insert it into the workflow

  1. Click System Management > Palette
  2. Click New
  3. Type LogDocument in the search box and click Filter
  4. Expand Document Transformers and click the LogDocument component type that is found and click OK
  5. In the popup that appears enter the following:

    FieldValue
    NamelogDocument
  6. Click Save
  7. Click System Management > Workflows > Ingest
  8. Click ingestPostProcess
  9. Click the Add Existing Component Button
  10. Type logDocument in the search box and click Filter
  11. Expand Platform Components > Document and click on the logDocument component and click OK
  12. Click Save
  13. Click System Management > Connectors and re-run the country connector
  14. When it is complete, open the following file in a text editor:

     <data-agent-dir>\projects\Factbook\default\logs\logs-local\docs-ingestPostProcess.logDocument-17000.xml
  15. The file will contain every document ingested during the connector's run. At this point in the workflow, fields will be tokenized such as the text field.

        <field name="text" language="en">
          <value>
            <tokens>['background'@20000002] ['sentence'@20000002] ['Discovered'#0~10, 'discover'@8#0~10] ['and'#11~14] ['claimed'#15~22, 'claim'@8#15~22] ['for'#23~26] ['location'@20000002#27~27] ['Spain'#27~32] ['location'@40000002#32~32] ['in'#33~35] ['number'@20000002#36~36] ['date'@20000002#36~36] ['1499'#36~40] ['date'@40000002#40~40] ['number'@40000002#40~40] [','@3#40~41] ['location'@20000002#42~42] ['Aruba'#42~47] ['location'@40000002#47~47] ['was'#48~51, 'be'@8#48~51] ['acquired'#52~60, 'acquire'@8#52~60] ['by'#61~63] ['the'#64~67] ['nationality'@20000002#68~68] ['Dutch'#68~73] ['nationality'@40000002#73~73] ['in'#74~76] ['number'@20000002#77~77] ['date'@20000002#77~77] ['1636'#77~81] ['date'@40000002#81~81] ['number'@40000002#81~81] ['.'@3#81~82] ['sentence'@40000002#82~82] ['sentence'@20000002#83~83] ['the'#83~86] ['island'#87~93] ['\''@3#93~94] ['s'#94~95] ['economy'#96~103] ['has'#104~107, 'have'@8#104~107] ['been'#108~112, 'be'@8#108~112] ['dominated'#113~122, 'dominate'@8#113~122] ['by'#123~125] ['number'@20000002#126~126] ['three'#126~131] ['number'@40000002#131~131] ['main'#132~136] ['industries'#137~147, 'industry'@8#137~147] ['.'@3#147~148] ['sentence'@40000002#148~148] ['sentence'@20000002#149~149] ['a'#149~150] ['19th'#151~155] ['century'#156~163] ['gold'#164~168] ['rush'#169~173] ['was'#174~177, 'be'@8#174~177] ['followed'#178~186, 'follow'@8#178~186] ['by'#187~189] ['prosperity'#190~200] ['brought'#201~208, 'bring'@8#201~208] ['on'#209~211] ['by'#212~214] ['the'#215~218] ['opening'#219~226, 'open'@8#219~226] ['in'#227~229] ['number'@20000002#230~230] ['date'@20000002#230~230] ['1924'#230~234] ['date'@40000002#234~234] ['number'@40000002#234~234] ['of'#235~237] ['an'#238~240] ['keyphrase'@20000002#241~241] ['oil'#241~244] ['refinery'#245~253] ['keyphrase'@40000002#253~253] ['.'@3#253~254] ['sentence'@40000002#254~254] ['sentence'@20000002#255~255] ['the'#255~258] ['last'#259~263] ['decades'#264~271, 'decade'@8#264~271] ['of'#272~274] ['the'#275~278] ['20th'#279~283] ['century'#284~291] ['saw'#292~295, 'see'@8#292~295] ['a'#296~297] ['boom'#298~302] ['in'#303~305] ['the'#306~309] ['tourism'#310~317] ['industry'#318~326] ['.'@3#326~327] ['sentence'@40000002#327~327] ['sentence'@20000002#328~328] ['location'@20000002#328~328] ['Aruba'#328~333] ['location'@40000002#333~333] ['seceded'#334~341, 'secede'@8#334~341] ['from'#342~346] ['the'#347~350] ['location'@20000002#351~351] ['Netherlands'#351~362] ['Antilles'#363~371] ['location'@40000002#371~371] ['in'#372~374] ['number'@20000002#375~375] ['date'@20000002#375~375] ['1986'#375~379] ['date'@40000002#379~379] ['number'@40000002#379~379] ['and'#380~383] ['became'#384~390, 'become'@8#384~390] ['a'#391~392] ['separate'#393~401] [','@3#401~402] ['autonomous'#403~413] ['member'#414~420] ['of'#421~423] ['the'#424~427] ['Kingdom'#428~435] ['of'#436~438] ['the'#439~442] ['location'@20000002#443~443] ['Netherlands'#443~454] ['location'@40000002#454~454] ['.'@3#454~455] ['sentence'@40000002#455~455] ['sentence'@20000002#456~456] ['Movement'#456~464] ['toward'#465~471] ['full'#472~476] ['independence'#477~489] ['was'#490~493, 'be'@8#490~493] ['halted'#494~500, 'halt'@8#494~500] ['at'#501~503] ['location'@20000002#504~504] ['Aruba'#504~509] ['location'@40000002#509~509] ['\''@3#509~510] ['s'#510~511] ['request'#512~519] ['in'#520~522] ['number'@20000002#523~523] ['date'@20000002#523~523] ['1990'#523~527] ['date'@40000002#527~527] ['number'@40000002#527~527] ['.'@3#527~528] ['sentence'@40000002#528~528] ['background'@40000002#528~528]</tokens>
            <string>Discovered and claimed for Spain in 1499, Aruba was acquired by the Dutch in 1636. the island's economy has been dominated by three main industries. a 19th century gold rush was followed by prosperity brought on by the opening in 1924 of an oil refinery. the last decades of the 20th century saw a boom in the tourism industry. Aruba seceded from the Netherlands Antilles in 1986 and became a separate, autonomous member of the Kingdom of the Netherlands. Movement toward full independence was halted at Aruba's request in 1990.</string>
          </value>
        </field>

    The closing <documents> tag is NOT added until Attivio shuts down.

3. Create an Attivio SDK project 

The Attivio Java SDK allows custom code (most commonly ingestion or query transformers) to be added to your Attivio projects. In the next several steps, we will create a custom module which contains a transformer which will alter the tokens of our incoming documents. 

    Navigate to the directory where you want to create your module. This should be a separate location from the Attivio installation or any Attivio projects you have created.

    cd C:\attivio\sdkprojects\

    Create a new module using the Maven archetype command:

     mvn archetype:generate -DarchetypeGroupId=com.attivio.platform.archetypes -DarchetypeArtifactId=attivio-archetype-module -DarchetypeVersion=5.6.1.0

    This will download a number of artifacts and prompt you for the following:

    • groupId - enter 'com.attivio.platform'
    • artifactId: enter 'piglatin'
    • package - accept the default package
    • Confirm the settings by typing 'Y'

    This command will result in a module project directory as follows:

    │   dist-assembly.xml
    │   pom.xml
    │
    └───src
        ├───main
        │   ├───java
        │   │   └───com
        │   │       └───attivio
        │   │           └───platform
        │   │               └───piglatin
        │   │                       ModuleInit.java
        │   │                       SampleAttivioRunnable.java
        │   │                       SampleDocumentModifyingTransformer.java
        │   │                       SampleFieldValueCreatingTransformer.java
        │   │                       SampleQueryRewriteTransformer.java
        │   │                       SampleQueryTransformer.java
        │   │                       SampleResponseTransformer.java
        │   │
        │   └───resources
        │       │   attivio.module.json
        │       │
        │       └───piglatin
        │               beans.xml
        │               features.xml
        │               module.xml
        │               piglatin.properties
        │
        └───test
            ├───java
            │   └───com
            │       └───attivio
            │           └───platform
            │               └───piglatin
            │                       SampleAttivioRunnableTest.java
            │                       SampleDocumentModifyingTransformerTest.java
            │                       SampleFieldValueCreatingTransformerTest.java
            │                       SampleQueryRewriterTransformerTest.java
            │                       SampleQueryTransformerTest.java
            │                       SampleResponseTransformerTest.java
            │
            └───resources
                    attivio.test.json 

    A number of sample source code files and their respective tests are included by default. Feel free to review them, such as the SampleDocumentModifyingTransformer.java class.

    Import the piglatin project into Eclipse:

    1. In Eclipse, choose File > Import.
    2. Expand the Maven group and select Existing Maven Projects and click Next.
    3. The piglatin project's pom.xml file should be displayed and selected. Click Finish.
    4. In Eclipse's Package Explorer, expand the src/main/java > com.attivio.platform.piglatin package.
    5. Right-click the com.attivio.platform.piglatin package and select New > Class.
    6. Name the new class TranslateToPigLatin.

    7. Click Finish.

    Edit the class so that it contains the following minimal code. The processDocument method is where we can intercept each IngestDocument and loop through its fields and modify each field's tokens.

    package com.attivio.platform.piglatin;
    
    import java.util.ArrayList;
    import java.util.List;
    import com.attivio.sdk.AttivioException;
    import com.attivio.sdk.ingest.*;
    import com.attivio.sdk.token.Token;
    import com.attivio.sdk.token.Position;
    import com.attivio.sdk.token.TokenAnnotation;
    import com.attivio.sdk.token.TokenList;
    import com.attivio.sdk.server.component.configuration.HasInputListProperty;
    import com.attivio.sdk.server.component.ingest.DocumentModifyingTransformer;
    public class TranslateToPigLatin implements DocumentModifyingTransformer, HasInputListProperty{
    	protected List<String> input = new ArrayList<String>();
    	
    	public boolean processDocument(IngestDocument doc)throws AttivioException{
    		for(String field : input){
    			if(doc.containsField(field)){
    				IngestField allValues = doc.getField(field);
    				
    				for(IngestFieldValue value : allValues){
    					TokenList tokenList = value.getTokenList();
    					if(tokenList == null)
    						continue;
    					for(Position position : tokenList.positions()){
    						final Token token = position.get();
    						String str = token.toString();
    						String pigLatinString = pigLatin(str);
    						if(!pigLatinString.equals(str)){
    							Token newToken = token.clone();
    							newToken.setValue(pigLatinString);
    							newToken.setAnnotation(TokenAnnotation.TOKENIZED);
    							position.add(newToken);
    						}
    					}
    				}
    			}
    		}
    		return true;
    	}
    	/**
         * Method to translate a sentence word by word.
         *
         * @param s
         *            The sentence in English
         * @return The pig latin version
         */
    	
    	private String pigLatin(String s) {
            String latin = "";
            int i = 0;
            while (i < s.length()) {
                // Take care of punctuation and spaces
                while (i < s.length() && !isLetter(s.charAt(i))) {
                    latin = latin + s.charAt(i);
                    i++;
                }
                // If there aren't any words left, stop.
                if (i >= s.length())
                    break;
                // Otherwise we're at the beginning of a word.
                int begin = i;
                while (i < s.length() && isLetter(s.charAt(i))) {
                    i++;
                }
                // Now we're at the end of a word, so translate it.
                int end = i;
                latin = latin + pigWord(s.substring(begin, end));
            }
            return latin;
        }
    	/**
         * Method to test whether a character is a letter or not.
         *
         * @param c
         *            The character to test
         * @return True if it's a letter
         */
        private static boolean isLetter(char c) {
            return ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z'));
        }
        /**
         * Method to translate one word into pig latin.
         *
         * @param word
         *            The word in english
         * @return The pig latin version
         */
        private static String pigWord(String word) {
            int split = firstVowel(word);
            // return word.substring(split)+"-"+word.substring(0, split)+"ay";
            return word.substring(split) + word.substring(0, split) + "ay";
        }
        /**
         * Method to find the index of the first vowel in a word.
         *
         * @param word
         *            The word to search
         * @return The index of the first vowel
         */
        private static int firstVowel(String word) {
            word = word.toLowerCase();
            for (int i = 0; i < word.length(); i++)
                if (word.charAt(i) == 'a' || word.charAt(i) == 'e'
                        || word.charAt(i) == 'i' || word.charAt(i) == 'o'
                        || word.charAt(i) == 'u')
                    return i;
            return 0;
        }
        @Override
        public List<String> getInput() {
            return input;
        }
        @Override
        public void setInput(List<String> input) {
            this.input = input;
        }
    } 

     

    Edit the src/main/resources/attivio.module.json file to add the new component:

    {
      "name":"piglatin",
      "moduleVersion":"${project.version}",
      "description":"A description of my module",
      "initClassName":"com.attivio.platform.piglatin.ModuleInit",
      "components": [
        "com.attivio.platform.piglatin.SampleFieldValueCreatingTransformer",
        "com.attivio.platform.piglatin.TranslateToPigLatin"
      ],
      "newFiles": {
        "lib/piglatin.jar":"lib/piglatin-${project.version}.jar"
      }
    }

    Build the module using Maven:

    cd C:\attivio\sdkprojects\piglatin
    mvn clean install
    ...
    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD SUCCESS
    [INFO] ------------------------------------------------------------------------
    [INFO] Total time: 18.290 s
    [INFO] Finished at: 2018-06-04T15:49:09-04:00
    [INFO] Final Memory: 27M/272M
    [INFO] ------------------------------------------------------------------------

    This will create a new file in the target directory of your module named piglatin-0.1.0-SNAPSHOT.zip. Next, we'll install this module into our Factbook project.

    4. Install the piglatin Module

      Run the following command to install the piglatin module:

       <install-dir>\bin\aie-exec modulemanager -i file:///c:/attivio/sdkprojects/piglatin/target/piglatin-0.1.0-SNAPSHOT.zip 

      Confirm the module has been installed:

       <install-dir>\bin\aie-exec modulemanager -l
       
      Name            Version        User      Installed On        Description
      -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
      cloudsupport    1.0.1          localuser 2018-05-24T13:00:27 Adds support for interacting with Cloud services
      module-alm      1.0.1.aie55    localuser 2018-05-24T12:59:57 Provides English language advanced linguistics capabilities, including language detection and entity extraction
      piglatin        0.1.0-SNAPSHOT apaquette 2018-06-04T16:06:13 A description of my module
      searchanalytics 1.0.1          localuser 2018-05-24T13:00:05 Archive, scan and query search information
      searchui        1.0.1          localuser 2018-05-24T13:00:14 Used to host the Search UI application from within Attivio nodes
      webcrawler      1.0.4          localuser 2018-05-24T13:00:21 Configure connectors to crawl web content and process the pages as ingest documents. 

      Incrementally add the piglatin module to the Factbook project:

      <install-dir>\bin\createproject.exe --name Factbook -i -m piglatin -o C:\attivio\projects 

      Open the Attivio CLI:

      <install-dir>\bin\aie-cli.exe -p C:\attivio\projects\Factbook 

      Type the update command and hit Enter 

      Type the deploy command and hit Enter 

      Once the project is running again, move on to the next step.

      5. Add an instance of the TranslateToPigLatin component to the workflow

      1. Click System Management > Palette
      2. Click New
      3. Type TranslateToPigLatin in the search box and click Filter
      4. Expand Document Transformers and click the TranslateToPigLatin component type that is found and click OK
      5. In the popup that appears enter the following:

        FieldValue
        NametranslateToPigLatin
        Input Fieldstitle
        text
      6. Click Save
      7. Click System Management > Workflows > Ingest
      8. Click ingestPostProcess
      9. Click the Add Existing Component Button
      10. Type translateToPigLatin in the search box and click Filter
      11. Expand Platform Components > Document and click on the translateToPigLatin component and click OK
      12. Select the translateToPigLatin component and click the Move Up button to move it before the logDocument component
      13. Click Save
      14. Click System Management > Connectors and re-run the country connector
      15. When it is complete, re-open the following file in a text editor:

         <data-agent-dir>\projects\Factbook\default\logs\logs-local\docs-ingestPostProcess.logDocument-17000.xml
      16. The file will contain every document ingested during the connector's run. At this point in the workflow, fields will be tokenized such as the text field.

            <field name="text" language="en">
              <value>
                <tokens>[&apos;background&apos;@20000002] [&apos;sentence&apos;@20000002] [&apos;Discovered&apos;#0~10, &apos;discover&apos;@8#0~10, &apos;iscoveredDay&apos;@2#0~10] [&apos;and&apos;#11~14, &apos;anday&apos;@2#11~14] [&apos;claimed&apos;#15~22, &apos;claim&apos;@8#15~22, &apos;aimedclay&apos;@2#15~22] [&apos;for&apos;#23~26, &apos;orfay&apos;@2#23~26] [&apos;location&apos;@20000002#27~27] [&apos;Spain&apos;#27~32, &apos;ainSpay&apos;@2#27~32] [&apos;location&apos;@40000002#32~32] [&apos;in&apos;#33~35, &apos;inay&apos;@2#33~35] [&apos;number&apos;@20000002#36~36] [&apos;date&apos;@20000002#36~36] [&apos;1499&apos;#36~40] [&apos;date&apos;@40000002#40~40] [&apos;number&apos;@40000002#40~40] [&apos;,&apos;@3#40~41] [&apos;location&apos;@20000002#42~42] [&apos;Aruba&apos;#42~47, &apos;Arubaay&apos;@2#42~47] [&apos;location&apos;@40000002#47~47] [&apos;was&apos;#48~51, &apos;be&apos;@8#48~51, &apos;asway&apos;@2#48~51] [&apos;acquired&apos;#52~60, &apos;acquire&apos;@8#52~60, &apos;acquireday&apos;@2#52~60] [&apos;by&apos;#61~63, &apos;byay&apos;@2#61~63] [&apos;the&apos;#64~67, &apos;ethay&apos;@2#64~67] [&apos;nationality&apos;@20000002#68~68] [&apos;Dutch&apos;#68~73, &apos;utchDay&apos;@2#68~73] [&apos;nationality&apos;@40000002#73~73] [&apos;in&apos;#74~76, &apos;inay&apos;@2#74~76] [&apos;number&apos;@20000002#77~77] [&apos;date&apos;@20000002#77~77] [&apos;1636&apos;#77~81] [&apos;date&apos;@40000002#81~81] [&apos;number&apos;@40000002#81~81] [&apos;.&apos;@3#81~82] [&apos;sentence&apos;@40000002#82~82] [&apos;sentence&apos;@20000002#83~83] [&apos;the&apos;#83~86, &apos;ethay&apos;@2#83~86] [&apos;island&apos;#87~93, &apos;islanday&apos;@2#87~93] [&apos;\&apos;&apos;@3#93~94] [&apos;s&apos;#94~95, &apos;say&apos;@2#94~95] [&apos;economy&apos;#96~103, &apos;economyay&apos;@2#96~103] [&apos;has&apos;#104~107, &apos;have&apos;@8#104~107, &apos;ashay&apos;@2#104~107] [&apos;been&apos;#108~112, &apos;be&apos;@8#108~112, &apos;eenbay&apos;@2#108~112] [&apos;dominated&apos;#113~122, &apos;dominate&apos;@8#113~122, &apos;ominatedday&apos;@2#113~122] [&apos;by&apos;#123~125, &apos;byay&apos;@2#123~125] [&apos;number&apos;@20000002#126~126] [&apos;three&apos;#126~131, &apos;eethray&apos;@2#126~131] [&apos;number&apos;@40000002#131~131] [&apos;main&apos;#132~136, &apos;ainmay&apos;@2#132~136] [&apos;industries&apos;#137~147, &apos;industry&apos;@8#137~147, &apos;industriesay&apos;@2#137~147] [&apos;.&apos;@3#147~148] [&apos;sentence&apos;@40000002#148~148] [&apos;sentence&apos;@20000002#149~149] [&apos;a&apos;#149~150, &apos;aay&apos;@2#149~150] [&apos;19th&apos;#151~155, &apos;19thay&apos;@2#151~155] [&apos;century&apos;#156~163, &apos;enturycay&apos;@2#156~163] [&apos;gold&apos;#164~168, &apos;oldgay&apos;@2#164~168] [&apos;rush&apos;#169~173, &apos;ushray&apos;@2#169~173] [&apos;was&apos;#174~177, &apos;be&apos;@8#174~177, &apos;asway&apos;@2#174~177] [&apos;followed&apos;#178~186, &apos;follow&apos;@8#178~186, &apos;ollowedfay&apos;@2#178~186] [&apos;by&apos;#187~189, &apos;byay&apos;@2#187~189] [&apos;prosperity&apos;#190~200, &apos;osperitypray&apos;@2#190~200] [&apos;brought&apos;#201~208, &apos;bring&apos;@8#201~208, &apos;oughtbray&apos;@2#201~208] [&apos;on&apos;#209~211, &apos;onay&apos;@2#209~211] [&apos;by&apos;#212~214, &apos;byay&apos;@2#212~214] [&apos;the&apos;#215~218, &apos;ethay&apos;@2#215~218] [&apos;opening&apos;#219~226, &apos;open&apos;@8#219~226, &apos;openingay&apos;@2#219~226] [&apos;in&apos;#227~229, &apos;inay&apos;@2#227~229] [&apos;number&apos;@20000002#230~230] [&apos;date&apos;@20000002#230~230] [&apos;1924&apos;#230~234] [&apos;date&apos;@40000002#234~234] [&apos;number&apos;@40000002#234~234] [&apos;of&apos;#235~237, &apos;ofay&apos;@2#235~237] [&apos;an&apos;#238~240, &apos;anay&apos;@2#238~240] [&apos;keyphrase&apos;@20000002#241~241] [&apos;oil&apos;#241~244, &apos;oilay&apos;@2#241~244] [&apos;refinery&apos;#245~253, &apos;efineryray&apos;@2#245~253] [&apos;keyphrase&apos;@40000002#253~253] [&apos;.&apos;@3#253~254] [&apos;sentence&apos;@40000002#254~254] [&apos;sentence&apos;@20000002#255~255] [&apos;the&apos;#255~258, &apos;ethay&apos;@2#255~258] [&apos;last&apos;#259~263, &apos;astlay&apos;@2#259~263] [&apos;decades&apos;#264~271, &apos;decade&apos;@8#264~271, &apos;ecadesday&apos;@2#264~271] [&apos;of&apos;#272~274, &apos;ofay&apos;@2#272~274] [&apos;the&apos;#275~278, &apos;ethay&apos;@2#275~278] [&apos;20th&apos;#279~283, &apos;20thay&apos;@2#279~283] [&apos;century&apos;#284~291, &apos;enturycay&apos;@2#284~291] [&apos;saw&apos;#292~295, &apos;see&apos;@8#292~295, &apos;awsay&apos;@2#292~295] [&apos;a&apos;#296~297, &apos;aay&apos;@2#296~297] [&apos;boom&apos;#298~302, &apos;oombay&apos;@2#298~302] [&apos;in&apos;#303~305, &apos;inay&apos;@2#303~305] [&apos;the&apos;#306~309, &apos;ethay&apos;@2#306~309] [&apos;tourism&apos;#310~317, &apos;ourismtay&apos;@2#310~317] [&apos;industry&apos;#318~326, &apos;industryay&apos;@2#318~326] [&apos;.&apos;@3#326~327] [&apos;sentence&apos;@40000002#327~327] [&apos;sentence&apos;@20000002#328~328] [&apos;location&apos;@20000002#328~328] [&apos;Aruba&apos;#328~333, &apos;Arubaay&apos;@2#328~333] [&apos;location&apos;@40000002#333~333] [&apos;seceded&apos;#334~341, &apos;secede&apos;@8#334~341, &apos;ecededsay&apos;@2#334~341] [&apos;from&apos;#342~346, &apos;omfray&apos;@2#342~346] [&apos;the&apos;#347~350, &apos;ethay&apos;@2#347~350] [&apos;location&apos;@20000002#351~351] [&apos;Netherlands&apos;#351~362, &apos;etherlandsNay&apos;@2#351~362] [&apos;Antilles&apos;#363~371, &apos;Antillesay&apos;@2#363~371] [&apos;location&apos;@40000002#371~371] [&apos;in&apos;#372~374, &apos;inay&apos;@2#372~374] [&apos;number&apos;@20000002#375~375] [&apos;date&apos;@20000002#375~375] [&apos;1986&apos;#375~379] [&apos;date&apos;@40000002#379~379] [&apos;number&apos;@40000002#379~379] [&apos;and&apos;#380~383, &apos;anday&apos;@2#380~383] [&apos;became&apos;#384~390, &apos;become&apos;@8#384~390, &apos;ecamebay&apos;@2#384~390] [&apos;a&apos;#391~392, &apos;aay&apos;@2#391~392] [&apos;separate&apos;#393~401, &apos;eparatesay&apos;@2#393~401] [&apos;,&apos;@3#401~402] [&apos;autonomous&apos;#403~413, &apos;autonomousay&apos;@2#403~413] [&apos;member&apos;#414~420, &apos;embermay&apos;@2#414~420] [&apos;of&apos;#421~423, &apos;ofay&apos;@2#421~423] [&apos;the&apos;#424~427, &apos;ethay&apos;@2#424~427] [&apos;Kingdom&apos;#428~435, &apos;ingdomKay&apos;@2#428~435] [&apos;of&apos;#436~438, &apos;ofay&apos;@2#436~438] [&apos;the&apos;#439~442, &apos;ethay&apos;@2#439~442] [&apos;location&apos;@20000002#443~443] [&apos;Netherlands&apos;#443~454, &apos;etherlandsNay&apos;@2#443~454] [&apos;location&apos;@40000002#454~454] [&apos;.&apos;@3#454~455] [&apos;sentence&apos;@40000002#455~455] [&apos;sentence&apos;@20000002#456~456] [&apos;Movement&apos;#456~464, &apos;ovementMay&apos;@2#456~464] [&apos;toward&apos;#465~471, &apos;owardtay&apos;@2#465~471] [&apos;full&apos;#472~476, &apos;ullfay&apos;@2#472~476] [&apos;independence&apos;#477~489, &apos;independenceay&apos;@2#477~489] [&apos;was&apos;#490~493, &apos;be&apos;@8#490~493, &apos;asway&apos;@2#490~493] [&apos;halted&apos;#494~500, &apos;halt&apos;@8#494~500, &apos;altedhay&apos;@2#494~500] [&apos;at&apos;#501~503, &apos;atay&apos;@2#501~503] [&apos;location&apos;@20000002#504~504] [&apos;Aruba&apos;#504~509, &apos;Arubaay&apos;@2#504~509] [&apos;location&apos;@40000002#509~509] [&apos;\&apos;&apos;@3#509~510] [&apos;s&apos;#510~511, &apos;say&apos;@2#510~511] [&apos;request&apos;#512~519, &apos;equestray&apos;@2#512~519] [&apos;in&apos;#520~522, &apos;inay&apos;@2#520~522] [&apos;number&apos;@20000002#523~523] [&apos;date&apos;@20000002#523~523] [&apos;1990&apos;#523~527] [&apos;date&apos;@40000002#527~527] [&apos;number&apos;@40000002#527~527] [&apos;.&apos;@3#527~528] [&apos;sentence&apos;@40000002#528~528] [&apos;background&apos;@40000002#528~528]</tokens>
                <string>Discovered and claimed for Spain in 1499, Aruba was acquired by the Dutch in 1636. the island&apos;s economy has been dominated by three main industries. a 19th century gold rush was followed by prosperity brought on by the opening in 1924 of an oil refinery. the last decades of the 20th century saw a boom in the tourism industry. Aruba seceded from the Netherlands Antilles in 1986 and became a separate, autonomous member of the Kingdom of the Netherlands. Movement toward full independence was halted at Aruba&apos;s request in 1990.</string>
              </value>
            </field>

      6. Test the Results

      1. Go to http://localhost:17000/searchui/ to open Search UI. Login with username aieadmin and password attivio.
      2. Search for Spain.
      3. Search for ainSpay. Notice how Spain is highlighted.

       

      • No labels