Giter VIP home page Giter VIP logo

elasticsearch-taste's Introduction

Elasticsearch Taste Plugin

Overview

Elasticsearch Taste Plugin is Mahout Taste-based Collaborative Filtering implementation. This plugin provides the following features of a recommendation engine on Elasticsearch:

  • Data management for Users/Items/Preferences.
  • Item-based Recommender.
  • User-based Recommender.
  • Similar Users/Contents
  • Text Analysis

Version

Taste Tested on elasticsearch
master 2.4.X
2.3.0 2.3.5
1.5.0 1.5.1
0.4.0 1.4.0
0.3.1 1.3.1

Note that this plugin supports Java 8 or the above. See README_river.md under Elasticsearch Taste 0.4.0.

Issues/Questions

Please file an issue. (Japanese forum is here.)

Installation

Install Taste Plugin

$ $ES_HOME/bin/plugin install org.codelibs/elasticsearch-taste/2.3.0

Getting Started

Insert Data

In this section, using MovieLens data set, you can learn about Taste plugin. For more information about MovieLens, see MovieLens site. The preference data set is u.data, it contains user id, item id, rating and timestamp. Download it and then insert data by Event API:

curl -o u.data http://files.grouplens.org/datasets/movielens/ml-100k/u.data
cat u.data | awk '{system("curl -XPOST localhost:9200/movielens/_taste/event?pretty -d \"{\\\"user\\\":{\\\"id\\\":" $1 "},\\\"item\\\":{\\\"id\\\":" $2 "},\\\"value\\\":" $3 ",\\\"timestamp\\\":" $4 "000}\"")}'

By the above request, the preference values are stored in "movielens" index. After inserting data, check them in the index:

curl -XGET "localhost:9200/movielens/_search?q=*:*&pretty"

Recommend Items From Users

To compute recommended items from users, execute the following request:

curl -XPOST localhost:9200/_taste/action/recommended_items_from_user -d '{
  "num_of_items": 10,
  "data_model": {
    "cache": {
      "weight": "100m"
    }
  },
  "index_info": {
    "index": "movielens"
  }
}'

The result is stored in movielens/recommendation. The response of the above request has a action name at the "name" property. To check if your request is finished, send a GET request:

curl -XGET "localhost:9200/_taste/action?pretty"

If the response contains the action name, your request is not completed yet.

For checking the result, send the following query:

curl -XGET "localhost:9200/movielens/recommendation/_search?q=*:*&pretty"

A value of "user_id" property is a target user, "items" property is recommended items which contains "item_id" and "value" property. A "value" property is a value of similarity.

The computation might take a long time... If you want to stop it, execute below:

curl -XDELETE localhost:9200/_taste/action/{action_name}

Evaluate Result

You can evaluate parameters, such as similarity and neighborhood, with the following "evaluate_items_from_user" action.

curl -XPOST localhost:9200/_taste/action/evaluate_items_from_user -d '{
  "evaluation_percentage": 1.0,
  "training_percentage": 0.9,
  "margin_for_error": 1.0,
  "data_model": {
    "cache": {
      "weight": "100m"
    }
  },
  "index_info": {
    "index": "movielens"
  },
  "neighborhood": {
    "factory": "org.codelibs.elasticsearch.taste.neighborhood.NearestNUserNeighborhoodFactory",
    "neighborhood_size": 100
  },
  "evaluator": {
    "id": "movielens_result",
    "factory": "org.codelibs.elasticsearch.taste.eval.RMSEvaluatorFactory"
  }
}'

The result is stored in report type:

curl -XGET "localhost:9200/movielens/report/_search?q=evaluator_id:movielens_result&pretty"
{
  "_index": "movielens",
  "_type": "report",
  "_id": "COscswwlQIugP2Rf0XKH-w",
  "_version": 1,
  "_score": 1,
  "_source": {
    "evaluation": {
      "score": 1.0199981244413419,
      "preference": {
        "total": 10092,
        "no_estimate": 178,
        "success": 6671,
        "failure": 3243
      },
      "time": {
        "average_processing": 18,
        "total_processing": 184813,
        "max_processing": 22881
      }
      "target": {
        "test": 915,
        "training": 943
      }
    }
    "@timestamp": "2014-05-07T21:15:43.948Z",
    "evaluator_id": "movielens_result",
    "report_type": "user_based",
    "config": {
      "training_percentage": 0.9,
      "evaluation_percentage": 1,
      "margin_for_error": 1
    }
  }
}

Similar Users

Calcurating similar users, run the following request:

curl -XPOST localhost:9200/_taste/action/similar_users -d '{
  "num_of_users": 10,
  "data_model": {
    "cache": {
      "weight": "100m"
    }
  },
  "index_info": {
    "index": "movielens"
  }
}'

If you check similar users for User ID 1, type the below:

curl -XGET "localhost:9200/movielens/user_similarity/_search?q=user_id:1&pretty"

Get by Your System ID

This plugin has own ID, such as user_id or item_id. If you want to access your system ID, use the following search API:

curl -XGET "localhost:9200/{index}/{type}/_taste/{user|item}/{your_user_or_item_id}?pretty"

For example, if you get similar users from ID=115:

curl -XGET localhost:9200/movielens/recommendation/_taste/user/1

Create Vectors from Text

You can create a term vector from your index which has a field with "term_vector". For the following example, text data are stored into "description" field in "ap" index.

curl -XPOST localhost:9200/ap?pretty
curl -XPOST localhost:9200/ap/article/_mapping?pretty -d '{
  "article" : {
    "properties" : {
      "id" : {
        "type" : "string",
        "index" : "not_analyzed"
      },
      "label" : {
        "type" : "string",
        "index" : "not_analyzed"
      },
      "description" : {
        "type" : "string",
        "analyzer" : "standard",
        "term_vector": "with_positions_offsets_payloads",
        "store" : true
      }
    }
  }
}'
curl -o ap.txt http://mallet.cs.umass.edu/ap.txt
sed -e "s/[\'\`\\]//g" ap.txt | awk -F"\t" '{sub(" ","",$1);system("curl -XPOST localhost:9200/ap/article/" $1 " -d \"{\\\"id\\\":\\\"" $1 "\\\",\\\"label\\\":\\\"" $2 "\\\",\\\"description\\\":\\\"" $3 "\\\"}\"")}'

To generate the term vector, run the following river:

curl -XPOST localhost:9200/_taste/action/generate_term_values?pretty -d '{
  "source": {
    "index": "ap",
    "type": "article",
    "fields": ["description"]
  },
  "event": {
    "user_index": "ap_term",
    "user_type": "doc",
    "item_index": "ap_term",
    "item_type": "term",
    "preference_index": "ap_term",
    "preference_type": "preference"
  }
}'

source property specify index, type and fields as source information, and event property is output information which is user/item/preference format.

Specification

Data Management

This plugin manages data of Users, Items and Preferences on Elasticsearch. These data are stored in each index and type. By default, they are in:

Data Index Type
User (Any) user
Item (Any) item
Preference (Any) preference

User index manages id and information about itself. User index contains the following properties:

Name Type Description
system_id string Unique ID. If your system has User ID, use it.
user_id long Unique User ID for this plugin.
@timestamp date Created/Updated time.
(Any) (any) You can use other information, such as age, tel,...

Item index manages an item information and contains:

Name Type Description
system_id string Unique ID. If your system has Item ID, use it.
item_id long Unique Item ID for this plugin.
@timestamp date Created/Updated time.
(Any) (any) You can use other information, such as price, publish date,...

Preference index manages values rated by an user for an item.

Name Type Description
user_id long Unique User ID for this plugin.
item_id long Unique Item ID for this plugin.
value float Value rated by user_id for item_id.
@timestamp date Created/Updated time.

You can create/update/delete the above index and document with Elasticsearch manner.

Insert Preference Value

Taste plugin provides an useful API to register a preference value. If you send it to http://.../{index}/_taste/event, user_id and item_id are generated and then the preference value is inserted. You can send multiple data with one request by using carriage return.

For example, if User ID is "U0001", Item ID is "I1000" and the preference(rating) value is 10.0, the request is below:

curl -XPOST localhost:9200/sample/_taste/event -d '{ user: { id: "U0001" }, item: { id: "I1000" }, value: 10.0 }'

If you send multiple data, the request is below:

curl -XPOST localhost:9200/sample/_taste/event -d \
  '{ user: { id: "U0001" }, item: { id: "I1000" }, value: 10.0 }
  { user: { id: "U0002" }, item: { id: "I1001" }, value: 15.0 }'

Values of user_id, item_id and @timestamp are generated automatically. They are stored in "sample" index. The index name can be changed to any name you want.

User Recommender

Precompute Recommended Items From Users

Recommended items for an user are computed from similar users. The computing process is started by creating a river configuration. If 10 recommended items are generated from similar users, the river configuration is:

curl -XPOST localhost:9200/_taste/action/recommended_items_from_user -d '{
  "num_of_items": 10,
  "max_duration": 120,
  "data_model": {
    "class": "org.codelibs.elasticsearch.taste.model.ElasticsearchDataModel",
    "scroll": {
      "size": 1000,
      "keep_alive": 60
    },
    "cache": {
      "weight": "100m"
    }
  },
  "index_info": {
    "preference": {
      "index": "sample",
      "type": "preference"
    },
    "user": {
      "index": "sample",
      "type": "user"
    },
    "item": {
      "index": "sample",
      "type": "item"
    },
    "recommendation": {
      "index": "sample",
      "type": "recommendation"
    },
    "field": {
      "user_id": "user_id",
      "item_id": "item_id",
      "value": "value",
      "items": "items",
      "timestamp": "@timestamp"
    }
  },
  "similarity": {
    "factory": "org.codelibs.elasticsearch.taste.similarity.LogLikelihoodSimilarityFactory"
  },
  "neighborhood": {
    "factory": "org.codelibs.elasticsearch.taste.neighborhood.NearestNUserNeighborhoodFactory",
    "min_similarity": 0.9,
    "neighborhood_size": 10
  }
}'

The configuration is:

Name Type Description
num_of_items int The number of recommended items.
max_duration int Max duration for computing(min).
data_model.class string Class name for DataModel implementation.
data_model.scroll object Elasticsearch scroll parameters.
data_model.cache string Cache size for the data model.
index_info object Index information(index/type/property name).
similarity.factory string Factroy name for Similarity implementation.
neighborhood.factory string Factroy name for Neighborhood implementation.

The recommended items are stored in sample/recommendation. You can see the result by:

curl -XGET "localhost:9200/sample/recommendation/_search?q=*:*&pretty"

The value of "items" property is recommended items.

Evaluate Result

To evaluate parameters for generating recommended items, you can use the following "evaluate_items_from_user" action.

curl -XPOST localhost:9200/_taste/action/evaluate_items_from_user -d '{
  "evaluation_percentage": 0.5,
  "training_percentage": 0.9,
  "data_model": {
    "class": "org.codelibs.elasticsearch.taste.model.ElasticsearchDataModel",
    "scroll": {
      "size": 1000,
      "keep_alive": 60
    },
    "cache": {
      "weight": "100m"
    }
  },
  "index_info": {
    "preference": {
      "index": "sample",
      "type": "preference"
    },
    "user": {
      "index": "sample",
      "type": "user"
    },
    "item": {
      "index": "sample",
      "type": "item"
    },
    "report": {
      "index": "sample",
      "type": "report"
    },
    "field": {
      "user_id": "user_id",
      "item_id": "item_id",
      "value": "value",
      "timestamp": "@timestamp"
    }
  },
  "similarity": {
    "factory": "org.codelibs.elasticsearch.taste.similarity.LogLikelihoodSimilarityFactory"
  },
  "neighborhood": {
    "factory": "org.codelibs.elasticsearch.taste.neighborhood.NearestNUserNeighborhoodFactory"
  }
}'
Name Type Description
evaluation_percentage float A sampling rate for a data model. 50% data is used if 0.5,
training_percentage float A rate for a training data set of sampled data model. If 0.9, 90% data is used as training one and 10% data is for testing.

The result is stored in report index(This example is sample/report).

Item Recommender

Precompute Recommended Items From Items

Recommended items for an item are computed from similar items. The computing process is started by creating a river configuration. If 10 recommended items are generated from similar items, the river configuration is:

curl -XPOST localhost:9200/_taste/action/recommended_items_from_item -d '{
  "num_of_items": 10,
  "max_duration": 120,
  "data_model": {
    "class": "org.codelibs.elasticsearch.taste.model.ElasticsearchDataModel",
    "scroll": {
      "size": 1000,
      "keep_alive": 60
    },
    "cache": {
      "weight": "100m"
    }
  },
  "index_info": {
    "preference": {
      "index": "sample",
      "type": "preference"
    },
    "user": {
      "index": "sample",
      "type": "user"
    },
    "item": {
      "index": "sample",
      "type": "item"
    },
    "item_similarity": {
      "index": "sample",
      "type": "item_similarity"
    },
    "field": {
      "user_id": "user_id",
      "item_id": "item_id",
      "value": "value",
      "items": "items",
      "timestamp": "@timestamp"
    }
  },
  "similarity": {
    "factory": "org.codelibs.elasticsearch.taste.similarity.LogLikelihoodSimilarityFactory"
  }
}'

The recommended items are stored in sample/item_similarity. You can see the result by:

curl -XGET "localhost:9200/sample/item_similarity/_search?q=*:*&pretty"

The value of "items" property is recommended items.

elasticsearch-taste's People

Contributors

emalock3 avatar keiichiw avatar marevol avatar nullpos avatar tairaku avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

elasticsearch-taste's Issues

Bulk API?

The examples show adding via /[index]/_taste/event

Is it possible to use the elasticsearch bulk API?

Multiple insert problem

Hello,
Using your exemple of a multiple insert (here) does not work. Only the first element is inserted in ES.
I'm trying either

curl -XPOST localhost:9200/sample/_taste/event -d "@dataSample.txt"

and either

curl -XPOST localhost:9200/sample/_taste/event -d \
'.........
.......
......'
None of them works.
dataSample.txt

System: MacOS X 10.11.4

Thanks !

Remove mahout-core

Interfaces for Mahout Taste does not meet our requirement..
Therefore, the dependency of mahout-core will be removed and be replaced with putting own package.

Duplicated inserts

Is it possible to override old preference if user_id and item_id matches by a new inserted preference automatically?

Is someone working on ES 1.6 support?

I tried to install the plugin on ES 1.6, but I'm getting "java.lang.UnsupportedClassVersionError: org/codelibs/elasticsearch/taste/TastePlugin : Unsupported major.minor version 52.0"

Plugin failure on ES 1.4.0

When installing the plugin and restarting Elasticsearch, I get the following:

org.elasticsearch.ElasticsearchException: Failed to load plugin class [org.codelibs.elasticsearch.taste.TastePlugin]
at org.elasticsearch.plugins.PluginsService.loadPlugin(PluginsService.java:531)
at org.elasticsearch.plugins.PluginsService.loadPluginsFromClasspath(PluginsService.java:406)
at org.elasticsearch.plugins.PluginsService.(PluginsService.java:115)
at org.elasticsearch.node.internal.InternalNode.(InternalNode.java:150)
at org.elasticsearch.node.NodeBuilder.build(NodeBuilder.java:159)
at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:70)
at org.elasticsearch.bootstrap.Bootstrap.main(Bootstrap.java:203)
at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:32)
Caused by: java.lang.UnsupportedClassVersionError: org/codelibs/elasticsearch/taste/TastePlugin : Unsupported major.minor version 52.0
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$100(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at org.elasticsearch.plugins.PluginsService.loadPlugin(PluginsService.java:508)

Extended doc

Hi!
Is there any more extended documentation anywhere?

Thanks a lot!

Provide query instead of index name when generating recommendations

Would it be possible to give a query instead of index name alone when generating the recommendations? For example, in the code below:
curl -XPOST localhost:9200/_river/movielens_items_from_user/_meta -d '{
"type": "taste",
"action": "recommended_items_from_user",
"num_of_items": 10,
"data_model": {
"cache": {
"weight": "100m"
}
},
"index_info": {
"index": "movielens"
}
}'

Instead of providing the index_info, would it be also possible to provide some query which will bring subset of the actual dataset? I do not want to recommend items for user from the entire dataset but subset of it. And having said that I do not want to have one index per user as well. Is it possible to use query as source of data instead of index itself?

Token Generator

It allows you to extract term vectors from user/item texts in the index and then store the value as preference data of this plugin.

SearchParseException: Parse Failure [No mapping found for [@timestamp] in order to sort on]

I've installed elasticsearch-taste(1.6.0-SNAPSHOT) with elasticsearch(1.6.1)
When I run first step it's failed to create index
cat u.data | awk '{system("curl -XPOST localhost:9200/movielens/_taste/event?pretty -d "{"user":{"id":" $1 "},"item":{"id":" $2 "},"value":" $3 ","timestamp":" $4 "000}"")}'

Here is the exception
Failed to execute [org.elasticsearch.action.search.SearchRequest@6e4a7280]
org.elasticsearch.search.SearchParseException: [movielens][4]: query[system_id:196],from[-1],size[1]: Parse Failure [Failed to parse source [{"size":1,"query":{"term":{"system_id":196}},"fields":"user_id","sort":[{"@timestamp":{"order":"desc"}}]}]]
at org.elasticsearch.search.SearchService.parseSource(SearchService.java:747)
at org.elasticsearch.search.SearchService.createContext(SearchService.java:572)
at org.elasticsearch.search.SearchService.createAndPutContext(SearchService.java:544)
at org.elasticsearch.search.SearchService.executeQueryPhase(SearchService.java:306)
at org.elasticsearch.search.action.SearchServiceTransportAction$5.call(SearchServiceTransportAction.java:231)
at org.elasticsearch.search.action.SearchServiceTransportAction$5.call(SearchServiceTransportAction.java:228)
at org.elasticsearch.search.action.SearchServiceTransportAction$23.run(SearchServiceTransportAction.java:559)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)

Is it possible to provide dynamic dataset for recommendation for different users?

I have user_id, item_id and preference_value. On the data file, a user may or may not have access to all items. Is it possible to generate recommendation for user, based on only dataset that is accessible to that user? In other words, can we first query the dataset by applying suitable filter for that user and generate recommendation based on that filtered query? I am currently using database query to generate dynamic dataset and feeding it to Mahout for recommendation. Can I do something similar with elasticsearch-taste plugin?

InvalidTypeNameException[mapping type name [_taste] can't start with '_']

Hello,

I'm trying out the taste-plugin using Elasticsearch 1.1.1 and thus the version 0.1 of the plugin.

Using the sample code in home README.md file after download the u.data file.

cat u.data | awk '{system("curl -XPOST localhost:9200/movielens/_taste/event?pretty -d \"{\\\"user\\\":{\\\"id\\\":" $1 "},\\\"item\\\":{\\\"id\\\":" $2 "},\\\"value\\\":" $3 ",\\\"timestamp\\\":" $4 "000}\"")}'

I get the following error.

{
  "error" : "InvalidTypeNameException[mapping type name [_taste] can't start with '_']",
  "status" : 400
}

Can anyone please give me an explanation on what's happening?

Improve the number of theads

For ForkJoinPool#commonPool, the number of threads is the same as cpu.
Therefore, # of threads cannot be changed.

When will similarity calculations run? And calculation order

Thanks for the great plugin.

I have questions.

  1. When will similarity calculations run?
    • Having read the docs, it seems to be at the same time as create record on index. isn't it?
  2. What is the order of the similarity calculations?
    • For example, if N records are already created, what will happen on adding more records?

I guess your plugin to be powerful enough to use in production-environment.
Thank you

InvalidIndexNameException[[_taste] Invalid index name [_taste], must not start with '_']

@marevol I have installed elasticsearch-taste(0.4.0) with elasticsearch(1.4.2)

I run first three step successfully

  1. curl -o u.data http://files.grouplens.org/datasets/movielens/ml-100k/u.data
  2. cat u.data | awk '{system("curl -XPOST localhost:9200/movielens/_taste/event?pretty -d "{\"user\":{\"id\":" $1 "},\"item\":{\"id\":" $2 "},\"value\":" $3 ",\"timestamp\":" $4 "000}"")}'
  3. curl -XGET "localhost:9200/movielens/search?q=:_&pretty"

But when run forth command to compute recommended items from users:

curl -XPOST localhost:9200/_taste/action/recommended_items_from_user -d '{
"num_of_items": 10,
"data_model": {
"cache": {
"weight": "100m"
}
},
"index_info": {
"index": "movielens"
}
}'

Getting error:
{"error":"InvalidIndexNameException[[_taste] Invalid index name [taste], must not start with '']","status":400}

Could you please let me know if i missing anything
Any helps is appreciated. Thanks!

Unsupported major.minor version 52.0

Hi,

I ran into some problems installing this plugin and wonder if anyone could help.

Env: OSX 10.10.1
Elasticsearch version: 1.4.0 (installed through homebrew)

I installed the plugin by running the command provided in the doc:

plugin --install org.codelibs/elasticsearch-taste/0.4.0                                                                                                                                                           [ruby-2.1.0]
-> Installing org.codelibs/elasticsearch-taste/0.4.0...
Trying http://download.elasticsearch.org/org.codelibs/elasticsearch-taste/elasticsearch-taste-0.4.0.zip...
Trying http://search.maven.org/remotecontent?filepath=org/codelibs/elasticsearch-taste/0.4.0/elasticsearch-taste-0.4.0.zip...
Downloading........DONE
Installed org.codelibs/elasticsearch-taste/0.4.0 into /usr/local/var/lib/elasticsearch/plugins/taste

After restarting elasticsearch, I received the following error:

elasticsearch --config=/usr/local/opt/elasticsearch/config/elasticsearch.yml                                                                                                                                      [ruby-2.1.0]
[2014-12-24 13:17:23,614][INFO ][node                     ] [Fagin] version[1.4.0], pid[21886], build[bc94bd8/2014-11-05T14:26:12Z]
[2014-12-24 13:17:23,615][INFO ][node                     ] [Fagin] initializing ...
[2014-12-24 13:17:23,625][WARN ][plugins                  ] [Fagin] failed to load plugin from [jar:file:/usr/local/var/lib/elasticsearch/plugins/taste/elasticsearch-taste-0.4.0.jar!/es-plugin.properties]
org.elasticsearch.ElasticsearchException: Failed to load plugin class [org.codelibs.elasticsearch.taste.TastePlugin]
    at org.elasticsearch.plugins.PluginsService.loadPlugin(PluginsService.java:531)
    at org.elasticsearch.plugins.PluginsService.loadPluginsFromClasspath(PluginsService.java:406)
    at org.elasticsearch.plugins.PluginsService.<init>(PluginsService.java:115)
    at org.elasticsearch.node.internal.InternalNode.<init>(InternalNode.java:150)
    at org.elasticsearch.node.NodeBuilder.build(NodeBuilder.java:159)
    at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:70)
    at org.elasticsearch.bootstrap.Bootstrap.main(Bootstrap.java:203)
    at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:32)
Caused by: java.lang.UnsupportedClassVersionError: org/codelibs/elasticsearch/taste/TastePlugin : Unsupported major.minor version 52.0
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:792)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at org.elasticsearch.plugins.PluginsService.loadPlugin(PluginsService.java:508)
    ... 7 more
[2014-12-24 13:17:23,631][INFO ][plugins                  ] [Fagin] loaded [], sites []
[2014-12-24 13:17:25,937][INFO ][node                     ] [Fagin] initialized
[2014-12-24 13:17:25,937][INFO ][node                     ] [Fagin] starting ...
[2014-12-24 13:17:25,995][INFO ][transport                ] [Fagin] bound_address {inet[/127.0.0.1:9300]}, publish_address {inet[/127.0.0.1:9300]}
[2014-12-24 13:17:26,009][INFO ][discovery                ] [Fagin] elasticsearch_cyanglee/Rfa9ma4eROKuSNctfSqAAw
[2014-12-24 13:17:29,803][INFO ][cluster.service          ] [Fagin] new_master [Fagin][Rfa9ma4eROKuSNctfSqAAw][cyanglee.local][inet[/127.0.0.1:9300]], reason: zen-disco-join (elected_as_master)
[2014-12-24 13:17:29,821][INFO ][http                     ] [Fagin] bound_address {inet[/127.0.0.1:9200]}, publish_address {inet[/127.0.0.1:9200]}
[2014-12-24 13:17:29,821][INFO ][node                     ] [Fagin] started
[2014-12-24 13:17:30,269][INFO ][gateway                  ] [Fagin] recovered [2] indices into cluster_state
^C[2014-12-24 13:19:33,432][INFO ][node                     ] [Fagin] stopping ...
[2014-12-24 13:19:33,483][INFO ][node                     ] [Fagin] stopped
[2014-12-24 13:19:33,483][INFO ][node                     ] [Fagin] closing ...
[2014-12-24 13:19:33,486][INFO ][node                     ] [Fagin] closed

Any helps is appreciated. Thanks!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.