symfony 弹性搜索匹配确切的术语不起作用
symfony elastic search match exact term not working
我将 symfony 与 fos elastica 捆绑包一起使用,但我遇到了一些问题
我有一个实体内容 link 与其他实体类别(名称和 slugname)x 内容只有 1 个类别。
我已经安装了包并像这样配置了 yml 文件
fos_elastica:
clients:
default: { host: 127.0.0.1, port: 9200 }
serializer:
callback_class: FOS\ElasticaBundle\Serializer\Callback
serializer: serializer
indexes:
portail:
client: default
settings:
index:
analysis:
analyzer:
custom_analyzer :
type: custom
tokenizer: nGram
char_filter: [html_strip]
filter: [stopwords, lowercase, snowball, elision]
custom_analyzer_simple :
type: custom
tokenizer: whitespace
filter: [lowercase]
custom_search_analyzer :
type: custom
char_filter: [html_strip]
tokenizer: whitespace
filter: [stopwords, lowercase, snowball, elision]
custom_search_analyzer_simple :
type: custom
tokenizer: whitespace
filter: [lowercase]
tokenizer:
nGram:
type: nGram
min_gram: 4
max_gram: 20
filter:
snowball:
type: snowball
language: French
elision:
type: elision
articles: [l, m, t, qu, n, s, j, d]
stopwords:
type: stop
stopwords: [_french_]
ignore_case : true
worddelimiter :
type: word_delimiter
types:
Content:
mappings:
titre:
type: string
index_analyzer: custom_analyzer
search_analyzer : custom_search_analyzer
preview:
type: string
index_analyzer: custom_analyzer
search_analyzer : custom_search_analyzer
contenu:
type: string
index_analyzer: custom_analyzer
search_analyzer : custom_search_analyzer
categorie:
type: object
properties:
slugnom:
type: string
index: not_analyzed
search_analyzer : custom_search_analyzer_simple
persistence:
driver: orm
model: PO\EtablissementBundle\Entity\Content
provider: ~
listener:
logger: true
finder: ~
Page:
mappings:
titre:
type: string
index_analyzer: custom_analyzer
search_analyzer : custom_search_analyzer
persistence:
driver: orm
model: PO\EtablissementBundle\Entity\PageEtablissement
provider: ~
listener:
logger: true
finder: ~
Etablissement:
mappings:
nom:
type: string
index_analyzer: custom_analyzer
search_analyzer : custom_search_analyzer
contents:
type: object
categories:
type: nested
properties:
slugnom:
type: string
index: not_analyzed
search_analyzer : custom_search_analyzer_simple
sous_categories:
type: nested
properties:
slugnom:
type: string
index: not_analyzed
persistence:
driver: orm
model: PO\EtablissementBundle\Entity\Etablissement
provider: ~
listener:
logger: true
finder: ~
我想有一些灵活性,但在内容类别 slugname 上,我想准确搜索单词,例如 arts-de-la-rue,但是当我进行搜索时,我发现结果是 categorie = arts 或 categorie = lecture ,我不明白这个问题:(
如果有人可以帮助我:)
您需要为此设置一个基于关键字的分析器。
分析仪上的 ngram 会破坏任何 slug。
可以为每个字段设置多个不同的分析器,但我不知道 FOS\ElasticaBundle
是否支持它:https://www.elastic.co/guide/en/elasticsearch/reference/current/multi-fields.html
稍后您可以针对这个新的原始字段执行 "filtered" 查询(术语过滤器)。
您必须为该字段设置映射
your field: { type: "string", index: "not_analyzed" }
为了确保销毁类型并重新填充它。
感谢您的帮助,我在配置中犯了一些错误。我已经嵌套了一个类型,实际上它是对象,属性的名称不好。
现在它运行完美:)
我将 symfony 与 fos elastica 捆绑包一起使用,但我遇到了一些问题
我有一个实体内容 link 与其他实体类别(名称和 slugname)x 内容只有 1 个类别。
我已经安装了包并像这样配置了 yml 文件
fos_elastica:
clients:
default: { host: 127.0.0.1, port: 9200 }
serializer:
callback_class: FOS\ElasticaBundle\Serializer\Callback
serializer: serializer
indexes:
portail:
client: default
settings:
index:
analysis:
analyzer:
custom_analyzer :
type: custom
tokenizer: nGram
char_filter: [html_strip]
filter: [stopwords, lowercase, snowball, elision]
custom_analyzer_simple :
type: custom
tokenizer: whitespace
filter: [lowercase]
custom_search_analyzer :
type: custom
char_filter: [html_strip]
tokenizer: whitespace
filter: [stopwords, lowercase, snowball, elision]
custom_search_analyzer_simple :
type: custom
tokenizer: whitespace
filter: [lowercase]
tokenizer:
nGram:
type: nGram
min_gram: 4
max_gram: 20
filter:
snowball:
type: snowball
language: French
elision:
type: elision
articles: [l, m, t, qu, n, s, j, d]
stopwords:
type: stop
stopwords: [_french_]
ignore_case : true
worddelimiter :
type: word_delimiter
types:
Content:
mappings:
titre:
type: string
index_analyzer: custom_analyzer
search_analyzer : custom_search_analyzer
preview:
type: string
index_analyzer: custom_analyzer
search_analyzer : custom_search_analyzer
contenu:
type: string
index_analyzer: custom_analyzer
search_analyzer : custom_search_analyzer
categorie:
type: object
properties:
slugnom:
type: string
index: not_analyzed
search_analyzer : custom_search_analyzer_simple
persistence:
driver: orm
model: PO\EtablissementBundle\Entity\Content
provider: ~
listener:
logger: true
finder: ~
Page:
mappings:
titre:
type: string
index_analyzer: custom_analyzer
search_analyzer : custom_search_analyzer
persistence:
driver: orm
model: PO\EtablissementBundle\Entity\PageEtablissement
provider: ~
listener:
logger: true
finder: ~
Etablissement:
mappings:
nom:
type: string
index_analyzer: custom_analyzer
search_analyzer : custom_search_analyzer
contents:
type: object
categories:
type: nested
properties:
slugnom:
type: string
index: not_analyzed
search_analyzer : custom_search_analyzer_simple
sous_categories:
type: nested
properties:
slugnom:
type: string
index: not_analyzed
persistence:
driver: orm
model: PO\EtablissementBundle\Entity\Etablissement
provider: ~
listener:
logger: true
finder: ~
我想有一些灵活性,但在内容类别 slugname 上,我想准确搜索单词,例如 arts-de-la-rue,但是当我进行搜索时,我发现结果是 categorie = arts 或 categorie = lecture ,我不明白这个问题:( 如果有人可以帮助我:)
您需要为此设置一个基于关键字的分析器。
分析仪上的 ngram 会破坏任何 slug。
可以为每个字段设置多个不同的分析器,但我不知道 FOS\ElasticaBundle
是否支持它:https://www.elastic.co/guide/en/elasticsearch/reference/current/multi-fields.html
稍后您可以针对这个新的原始字段执行 "filtered" 查询(术语过滤器)。
您必须为该字段设置映射
your field: { type: "string", index: "not_analyzed" }
为了确保销毁类型并重新填充它。
感谢您的帮助,我在配置中犯了一些错误。我已经嵌套了一个类型,实际上它是对象,属性的名称不好。 现在它运行完美:)