我认为最好是描述我的意图并尝试将其分解为代码。
query_string
提供的复杂查询。例如'AND'和'OR'和'〜'等。query_string
单独搜索它们而不是短语。例如,“谁将会”应该为我带来最高级别的比赛,当这三个单词按顺序排列时,请稍后再给我。当前查询:
{
"indices_boost": {},
"aggregations": {
"by_ayah_key": {
"terms": {
"field": "ayah.ayah_key",
"size": 6236,
"order": {
"average_score": "desc"
}
},
"aggregations": {
"match": {
"top_hits": {
"highlight": {
"fields": {
"text": {
"type": "fvh",
"matched_fields": [
"text.root",
"text.stem_clean",
"text.lemma_clean",
"text.stemmed",
"text"
],
"number_of_fragments": 0
}
},
"tags_schema": "styled"
},
"sort": [
{
"_score": {
"order": "desc"
}
}
],
"_source": {
"include": [
"text",
"resource.*",
"language.*"
]
},
"size": 5
}
},
"average_score": {
"avg": {
"script": "_score"
}
}
}
}
},
"from": 0,
"size": 0,
"_source": [
"text",
"resource.*",
"language.*"
],
"query": {
"bool": {
"must": [
{
"query_string": {
"query": "inna alatheena",
"fuzziness": 1,
"fields": [
"text^1.6",
"text.stemmed"
],
"minimum_should_match": "85%"
}
}
],
"should": [
{
"match": {
"text": {
"query": "inna alatheena",
"type": "phrase"
}
}
}
]
}
}
}
注意:alatheena
在没有~
的情况下进行搜索,虽然索引中有allatheena
,但不会返回任何内容。所以我必须进行模糊搜索。
有什么想法吗?
答案 0 :(得分:1)
您应该使用Dis Max Query来实现这一目标。
生成由其生成的文档的并集的查询 子查询,并为每个文档评分最高分数 该文档由任何子查询生成,加上打破平局 任何其他匹配子查询的增量。
这在使用多个字段搜索单词时非常有用 不同的提升因子(因此不能组合字段 等效地进入单个搜索字段)。我们希望得分为 是与最高提升相关联的人。
快速举例说明如何使用它:
POST /_search
{
"query": {
"dis_max": {
"tie_breaker": 0.7,
"boost": 1.2,
"queries": [
{
"match": {
"text": {
"query": "inna alatheena",
"type": "phrase",
"boost": 5
}
}
},
{
"match": {
"text": {
"query": "inna alatheena",
"type": "phrase",
"fuzziness": "AUTO",
"boost": 3
}
}
},
{
"query_string": {
"default_field": "text",
"query": "inna alatheena"
}
}
]
}
}
}
它将运行您的所有查询,并且将获得与其他查询相比得分最高的查询。所以只需使用它来定义规则。你应该达到你想要的目标。
答案 1 :(得分:1)
我看到你正在对Qur' anic经文进行ES索引, +1 ......
如果我理解正确,你的大部分问题域都可以通过在Aayah文档的单独字段中存储大量音译变体(及其组合的排列)来解决。
首先,您应该制作一个字符过滤器,用单个字母[aa] => [a]
替换所有双字母,[ll] => [l]
也许还会创建一个单独的字段,其中包含所有[a, e, i]
(由于他们的"声音" / transcribal歧义)替换为€
或类似的东西,并在查询时执行相同的操作为了获得尽可能多的比赛......
此外,TH" allatheena" (作为脚注可能真的是Dhaal,Thaa,Zaa,Taa + Haa,Taa + Hhaa,Ttaa + Hhaa转录......)应该被某些东西取代,或者Dhaal和Thaa都应该被多次转录。 / p>
然后,因为它的Qur' anic脚本,所有没有变音符号的Alefs,Hamza,Madda等应该被视为Alef(或Hamzat)ul-Wasl,并且在索引时也应该考虑/搜索,因为Waqf / Wasl在阅读阿拉伯语。 (例如考虑在Surat Al-Alaq的第一个Aayah中的所有Wasl`s)
Dunno,如果这是以任何方式回答您的问题,但我希望它在实施您的应用程序方面提供一些帮助。