В таком случае я должен искать строку, разделенную запятой, с полями, разделенными запятой, из-за этого я делаю следующее при сопоставлении, но показываю ошибку MapperParsingException[Analyzer [comma] not found for field [conduct_days]]
.ElasticSearch как искать разделенные запятыми строки внутри разделенных запятыми полей?
$course = new Course();
$course->no = '1231321';
.......
.......
$course->save();
// Now index the new created course
$client = \Elasticsearch\ClientBuilder::create()->build();
$params = [
'index' => 'my_index',
'type' => 'my_resources',
'body' => [
'my_resources' => [
'_source' => [
'enabled' => true
],
'settings' => [
"analysis" => [
"tokenizer" => [
"comma" => [
"type" => "pattern",
"pattern" => ","
]
],
"analyzer" => [
"comma" => [
"type" => "custom",
"tokenizer" => "comma"
]
]
]
],
'properties' => [
'conduct_days' => array(
'type' => 'string',
'analyzer' => 'comma'
),
'no' => array(
'type' => 'string',
'analyzer' => 'standard'
),
'created_at' => array(
'type' => 'date_time',
"format"=>"YYYY-MM-dd HH:mm:ss||MM/dd/yyyy||yyyy/MM/dd"
),
'updated_at' => array(
'type' => 'date_time',
"format" => "YYYY-MM-dd HH:mm:ss||MM/dd/yyyy||yyyy/MM/dd"
),
'deleted_at' => array(
'type' => 'date_time',
"format" => "YYYY-MM-dd HH:mm:ss||MM/dd/yyyy||yyyy/MM/dd"
),
'created_by' => array(
'type' => 'string',
'analyzer' => 'standard'
),
'updated_by' => array(
'type' => 'string',
'analyzer' => 'standard'
),
'deleted_by' => array(
'type' => 'string',
'analyzer' => 'standard'
)
]
]
]
];
// Update the index mapping
$client->indices()->putMapping($params);
$params = [
'index' => 'promote_kmp',
'type' => 'courses',
'id' => uniqid(),
'body' => [
'id' => $course->id,
'conduct_days' => $course->conduct_days,
'no' => $course->no,
'created_at' => $course->created_at,
'created_by' => $loggedInUser,
]
];
$client->index($params);
Предположим, что я должен искать 1,3,5,7
внутри проводить дни полей, которые могут имеет 1,2
и 1,2,3
и 1,3,5,6
и многое другое. Для поиска я думаю, что я должен взорвать поисковый запрос, например, если поисковый запрос 1,2
, я должен искать два раза, сначала для 1
, а затем для 2
. Любое другое решение для поиска?
Но поскольку я должен создать картографирования много раз, например, внутри создать действие, обновление и удалить, как мне создать индекс, который должен был создать один раз. На данный момент я меняю свой код, как тот, который вы указали, показывает эту ошибку. 'IndexAlreadyExistsException [[promotion_kmp] уже существует]'. – jones
Обычно вы создаете индекс и тип отображения, а затем вам больше не нужно. Вы можете удалить индекс перед его созданием с помощью '$ response = $ client-> index() -> delete (['index' => 'promotion_kmp']);'. Затем вы можете снова вызвать 'create'. – Val
Но, удалив индекс, безопасны ли данные? Я думаю, что потеряю индексированные документы. – jones