Служба упорядоченного поиска не работает, если нет пробела

Я становлюсь мокрым от осуществления эластичного поиска и реализации PHP. У меня есть названия продуктов, как 9 x 4 дальнобойщик, 19 x 40 автокресло и т. Д. И т. Д.

Я ищу свой индекс, как это

$params = [
'index' => 'myindex',
'type' => 'products',
'body' => [
'query' => [
'match' => [
'name' => '9 x12'
]
],

]
];

так что это возвращает мои продукты, которые имеют 9 х 12 в своем названии. Однако, когда я пытаюсь найти 9×12, выполнив ‘name’ => ‘9 x12’, ничего не возвращается. Чего мне не хватает Спасибо

РЕДАКТИРОВАНИЕ
Я использовал это, чтобы заполнить индекс

PUT /myindex
{
"settings": {
"number_of_shards": 5,
"number_of_replicas": 0,
"analysis": {
"analyzer": {
"whitespace_analyzer": {
"type": "custom",
"tokenizer": "whitespace",
"filter": [
"lowercase",
"asciifolding"]
}
}
}
},
"mappings": {
"doc": {
"properties": {
"text_field": {
"type": "string",
"analyzer": "whitespace_analyzer"}
}
}
}
}

Я также попробовал настройки ниже, но они также не работали

PUT /myindex
{
"settings":{
"analysis": {
"analyzer": {
"lowercasespaceanalyzer": {
"type": "custom",
"tokenizer": "whitespace",
"filter": [
"lowercase"]
}
}
}
},"mappings": {
"products" : {
"properties" : {
"title" : { "type" : "string", "analyzer" : "lowercasespaceanalyzer", "tokenizer": "lowercase", "search_analyzer":"whitespace", "filter": [
"lowercase"] }
}
}
}
}

ОБНОВЛЕНИЕ :: Мое Текущее Отображение

Я использовал вызов API для получения текущего отображения. Не уверен, что это поможет, но вот оно

{
clipboards: {
mappings: {
products: {
properties: {
product: {
properties: {
bottomleft_png: {},
bottomright_png: {},
cost: {},
date_added: {},
date_available: {},
date_modified: {},
description: {},
ean: {},
height: {},
image: {},
isbn: {},
jan: {},
length: {},
length_class_id: {},
location: {},
manufacturer_id: {},
minimum: {},
model: {},
mpn: {},
options: {},
points: {},
price: {},
product_gallery: {},
product_id: {},
quantity: {},
shipping: {},
sku: {},
sort_order: {},
status: {},
stock_status_id: {},
subtract: {},
tax_class_id: {},
topleft_png: {},
topright_png: {},
upc: {},
viewed: {},
weight: {},
weight_class_id: {},
width: {}
}
}
}
}
}
}
}

Образец документа

  "_index": "clipboards",
"_type": "products",
"_id": "100",
"_score": 1,
"_source": {
"product": {
"product_id": "100",
"model": "9043",
"sku": "",
"upc": "",
"ean": "",
"jan": "",
"isbn": "",
"mpn": "",
"location": "",
"quantity": "67",
"stock_status_id": "8",
"image": "catalog/Clipboards/Clipboard_accessories/Bands/ISO-bands/iso-clipboard-bands-a29135.jpg",
"manufacturer_id": "13",
"shipping": "1",
"name": "9x4 truck""price": "4.9500",
"points": "360",
"tax_class_id": "9",
"date_available": "2013-09-08",
"weight": "0.05000000",
"weight_class_id": "5",
"length": "0.00000000",
"width": "0.00000000",
"height": "0.00000000",
"length_class_id": "3",
"subtract": "1",
"minimum": "1",
"sort_order": "1",
"status": "1",
"viewed": "585",
"date_added": "2015-04-07 02:04:21",
"date_modified": "2015-11-25 12:42:17",
"topleft_png": "",
"options": [
{
"product_option_value_id": "31",
"product_option_id": "232",
"product_id": "100",
"option_id": "17",
"option_value_id": "64",
"quantity": "100",
"subtract": "1",
"price": "0.0000",
"price_prefix": "+",
"points": "0",
"points_prefix": "+",
"weight": "0.00000000",
"weight_prefix": "+",
"option_name": "Black",

"main_option_heading_sort_order": "1",
"main_option_heading": "ISO Band Color"},
{
"product_option_value_id": "32",
"product_option_id": "232",
"product_id": "100",
"option_id": "17",
"option_value_id": "65",
"quantity": "100",
"subtract": "1",
"price": "0.0000",
"price_prefix": "+",
"points": "0",
"points_prefix": "+",
"weight": "0.00000000",
"weight_prefix": "+",
"option_name": "Pink",

"main_option_heading_sort_order": "2",
"main_option_heading": "ISO Band Color"},
{
"product_option_value_id": "33",
"product_option_id": "232",
"product_id": "100",
"option_id": "17",
"option_value_id": "66",
"quantity": "100",
"subtract": "1",
"price": "0.0000",
"price_prefix": "+",
"points": "0",
"points_prefix": "+",
"weight": "0.00000000",
"weight_prefix": "+",
"option_name": "Clear",

"main_option_heading_sort_order": "3",
"main_option_heading": "ISO Band Color"}
],
"product_gallery": []
}
}
}

0

Решение

Так как вы только начинаете с ES, одна из самых важных вещей, которую нужно понять, это то, как анализ работает в ES. это хорошая отправная точка.

Ты используешь whitespace tokenizer с lowercase filter, поэтому, когда вы индексируете 9 х 12, три токена хранятся в перевернутый индекс а именно 9, Икс а также 12. Когда вы индексируете 9×12 генерируется только один токен, т.е. 9×12 сам. Теперь, когда вы ищете 9 х12, ES ищет либо 9 или же x12 и, следовательно, он не может найти документ, проиндексированный как 9×12

РЕДАКТИРОВАТЬ

Из ваших требований я создал следующий индекс

POST prod_index
{
"settings": {
"analysis": {
"analyzer": {
"vehicle_analyzer": {
"char_filter": [
"vehicle_extractor"],
"tokenizer": "standard",
"filter": [
"lowercase",
"asciifolding"]
}
},
"char_filter": {
"vehicle_extractor": {
"type": "pattern_replace",
"pattern": "(?i)(\\d+)\\s*x\\s*(\\d+)",
"replacement": "$1x$2"}
}
}
},
"mappings": {
"your_type": {
"properties": {
"name": {
"type": "string",
"analyzer": "vehicle_analyzer"}
}
}
}
}

я использую pattern_replace char filter, его работа заключается в объединении строк в форме цифра х цифра к одному токену, например 9x 12, 9 х 12 а также 9 х12 станет 9×12. Ты можешь использовать анализировать API чтобы увидеть, как vehicle_ analyzer работает.

Теперь ваш запрос будет работать нормально. 9 x12 вернет все возможные комбо, вы получите 9x12 truck, 9 x 12 car и т.д. Теперь, если вы хотите найти 9 x12 truck использование match_phrase вместо match,

Это помогает?

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]