我使用symfony与fos elastica捆绑但我有一些问题
我有一个实体内容与其他实体类别(名称和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但是当我进行搜索时我发现结果有类别= arts或categorie =讲座,我不明白这个问题:( 如果有人可以帮助我:)。
答案 0 :(得分:0)
您需要为此设置基于关键字的分析器。
分析仪上的ngram会破坏任何slu ..
每个字段可以设置多个不同的分析器,但我不知道FOS\ElasticaBundle
是否支持https://www.elastic.co/guide/en/elasticsearch/reference/current/multi-fields.html
稍后,您可以针对此新原始字段执行“过滤”查询(术语过滤器)。
答案 1 :(得分:0)
您必须为该字段设置映射
your field: { type: "string", index: "not_analyzed" }
只是为了确保破坏类型并重新填充它。
答案 2 :(得分:0)
感谢您的帮助,我在配置中犯了一些错误。我已经放置了一个嵌套的类型,事实上它的对象和属性的名称并不好。 现在它完美地工作了:))