I am new in elasticsearch and I need to write query described below
I have an elasticsearch index with documents like this one
Numbers mean entries of words in book
{
"words": { # words listed below are different in every document
"cat": 7,
"monkey": 4,
"mouse": 10,
...
}
I want to search documents by words “cats” (not “cat”), “monkey” and e.g “mous”. How do I write query that will find “cat”, “monkey” and “mouse” in document and consider their values in counting score?
upd. Example: I have documents
{ # doc1
"words": {
"cat": 7,
"monkey": 4,
"mouse": 10,
}
}
{ # doc2
"words": {
"Cat": 20,
"monkeys": 40,
"mouse": 10,
}
}
{ # doc3
"words": {
"Dog": 10,
"monkey": 2,
"human": 10,
}
}
# I am searching by words "cats", "monkey", "mouse"
# I want to get doc2 as the most relevant result (because of words matches and entries quantity).
# doc1 should be the second result (words do match, but there are less entries).
# doc3 is the third result (too few words matches)
Any ideas?
Advertisement
Answer
I don’t know if I understand correctly but you want to search for “cats” and return the doc words with the words “cat”, “monkey” and “mouse”.
Run this example I made and see if it works for you.
PUT my-index-000001
{
"mappings" : {
"properties" : {
"words" : {
"properties" : {
"count" : {
"type" : "text"
},
"key" : {
"type" : "text",
"analyzer": "english"
}
}
}
}
}
}
POST my-index-000001/_doc/1
{
"words": [
{
"key": "cat",
"count": "7"
},
{
"key": "monkey",
"count": "4"
},
{
"key": "mouse",
"count": "10"
}
]
}
GET my-index-000001/_search
{
"query": {
"match": {
"words.key":{
"query": "cats"
}
}
}
}