Если вы сначала отфильтруете результаты на основе вашего идентификатора клиента, а затем только выполните поиск, то это не повлияет на релевантность, и вы можете и вам следует объединить эти данные в Elasticsearch, а не создавать 3. различные индексы для этой цели.
Вы можете узнать больше о запросах и фильтрах contextx t и их влиянии на оценку.
Позвольте мне показать вам на небольшом примере:
Индекс def
{
"mappings": {
"properties": {
"setA": {
"type": "text"
},
"setB": {
"type": "text"
},
"setC": {
"type": "text"
},
"customer-id": {
"type": "long"
}
}
}
}
Индексировать два образца документов для каждого клиента
{
"setA" : "first customer",
"setB" : "first customer",
"setC" : "",
"customer-id" : 1
}
{
"setA" : "first customer set A",
"setB" : "first customer set B",
"setC" : "",
"customer-id" : 1
}
{
"setA" : "second customer",
"setC" : "second customer",
"customer-id" : 2
}
{
"setA" : "second customer set A",
"setC" : "second customer set C",
"customer-id" : 2
}
{
"setB" : "third customer",
"setC" : "third customer",
"customer-id" : 3
}
{
"setB" : "third customer set A",
"setC" : "third customer set C",
"customer-id" : 3
}
Поиск запроса с помощью первой фильтрации Первый клиент, а затем поиск с оценкой релевантности
{
"query": {
"bool": {
"must": [ --> this would match and order according to relevance score
{
"match": {
"setA": "first"
}
}
],
"filter": [ --> this is used for filtering all docs for cust-1
{
"term": {
"customer-id": 1
}
}
]
}
}
}
Результат поиска
"hits": [
{
"_index": "so_query_filter",
"_type": "_doc",
"_id": "1",
"_score": 0.8025915, --> relevance is high
"_source": {
"setA": "first customer",
"setB": "first customer",
"setC": "",
"customer-id": 1 --> only cust-1 doc
}
},
{
"_index": "so_query_filter",
"_type": "_doc",
"_id": "2",
"_score": 0.60996956, -> relavance is low as more words than first
"_source": {
"setA": "first customer set A",
"setB": "first customer set B",
"setC": "",
"customer-id": 1 --> only cust-1 doc
}
}
]