I'm pretty new to elastic search, I'm having this issue below.
Having these two records:
POST test/_doc/1
{
"id": 1,
"authors": [
{
"name": "Test Name",
"url": "/url/1/"
}
]
}
POST test/_doc/2
{
"id": 2,
"authors": [
{
"name": "Test Name",
"url": "/url/1/"
},
{
"name": "Another author",
"url": "/url/another/"
}
]
}
And this query:
GET test/_search
{
"query": {
"function_score": {
"query": {
"bool": {
"should": [
{
"match_phrase": {
"authors.name": {
"_name": "exact match in authors",
"query": "Test Name",
"boost": 100,
"slop": 1
}
}
}
]
}
}
}
}
}
Why the score is lower when having multiple authors? And how can I make it higher or the same value as the record that have only one author?
{
...
"hits": {
"max_score": 42.221836,
"hits": [
{
"_score": 42.221836,
"_source": {
"id": 1,
"authors": [
{
"name": "Test Name",
"url": "/url/1/"
}
]
},
"matched_queries": [
"exact match in authors"
]
},
{
"_score": 32.088596,
"_source": {
"id": 2,
"authors": [
{
"name": "Test Name",
"url": "/url/1/"
},
{
"name": "Another author",
"url": "/url/another/"
}
]
},
"matched_queries": [
"exact match in authors"
]
}
]
}
}
I can't find anything on the docs about this.
The following details are just to make sure stackoverflow don't show the following error:
It looks like your post is mostly code; please add some more details.
I tried @paulo solution, but it didn't fully work for me, so I ended up adding a nested field:
"authors": {
"type": "nested",
"properties": {
"name": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"url": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
},
And used this query:
{
"nested": {
"path": "authors",
"_name": "exact match in authors",
"query": {
"bool": {
"must": {
"match_phrase": {
"authors.name": {
"query": "Test Name",
"boost": 100,
"slop": 1,
}
}
}
}
},
}
}
Elastic search doc: https://www.elastic.co/guide/en/elasticsearch/reference/current/nested.html
After these changes, it worked perfectly!