簡體   English   中英

元素查詢中的值查詢

[英]Value-Query within an Element-Query

搜索總高度為4“的項目:

我有一個關於使用cts:search的問題。 考慮以下xml:

<Item Id="07123114-5c14-4ba9-a6ad-7b688feb8706" ...>
...
  <AttributeValue AttributeName="Mounting Application" AttributeGroup="Search_Application">Tank</AttributeValue>
  <AttributeValue AttributeName="Type" AttributeGroup="Search_Type">Pump Mounting Bracket</AttributeValue>
  <AttributeValue AttributeName="Overall Width" AttributeGroup="Search_Width">15/16 "</AttributeValue>
  <AttributeValue AttributeName="Overall Height" AttributeGroup="Search_Height">1-3/8 "</AttributeValue>
...
</Item>

假設我想尋找總體高度= 4的物品

我在cts中使用以下查詢:search:

cts:search(/tx:Item,
  cts:element-query(xs:QName("tx:AttributeValue"), cts:and-query((
    cts:element-attribute-value-query(xs:QName("tx:AttributeValue"), xs:QName("AttributeName"), "Overall Height"),
    cts:word-query("4 """, "exact"))))
)

這給了我所有物品的總高度為4“,或1/4”,或3/4“等等。這是因為單詞查詢執行'包含'搜索。但我想要一個確切的值匹配。我不能進行元素值查詢,因為它包含在元素查詢中(元素值不是子元素)。

我們目前的兩個選擇涉及更改xml結構:選項1.使值成為AttributeValue元素的屬性; 選項2.使其成為子元素。

我覺得必須有辦法在不改變xml結構的情況下獲得我正在尋找的東西。 請指教。

我將更改XML:使用AttributeName生成有意義的元素名稱。

MarkLogic假定您的XML具有有意義的元素和屬性名稱。 這種XML結構看起來像一個非常好的序列化格式。 但它是一種糟糕的查詢格式,因為元素名稱沒有意義。 它就像一個有三列的關系數據庫表:type,group,value。 所以每個查詢都必須加入WHERE TYPE=? AND VALUE=? WHERE TYPE=? AND VALUE=? WHERE HEIGHT=?查找值更有效率WHERE HEIGHT=? 所以MarkLogic在這個方向上非常強烈地推動你。

從技術上講,可以找到解決這個問題的方法,但是你正在使用這個工具。 而是嘗試將XML視為MarkLogic如何構建其索引的模型。 當XML不容易查詢時,請更改它。

你的根本問題是標記化將打破/和空間,所以“2/4”包含單詞“4”,這就是你要求的。

你可以通過創建一個帶有tokenizer覆蓋的字段(ML7)來實現這一點,這樣/是一個單詞標記,空格和“被刪除。然后用字段查詢替換給定字段的單詞查詢。

不過,我確實同意邁克爾的觀點,即你會更加努力地看待數據建模。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM